Java的socket好像是基于tcp的,一些底层的东西,现在只是记录如何使用一些顶层的API来完成简单应用,底层原理,协议,以后再说。。。。
服务端
socket像一种通道,或者【串口】的概念,需要打开一个ServerSocket
对象,作为接收侦听的【服务端】,然后ServerSocket
需要打开侦听,也就是accept
,这个举动会像一个while
语句一样一直进行,直到有客户端连接,那么它会返回一个socket
对象
基于socket
对象,建立它的流控制器,就可以收发了
客户端
同样建立socket
,不过是依照IP和端口号进行,并返回与server
连接的socket
,连接之后同样创建对应的流控制器,就可以收发了
代码
服务端:
package socket;
import java.io.*;
import java.net.*;
public class Server
{
public static void main(String[] args) throws Exception
{
// 建立socket侦听
int port = 54321;
ServerSocket server = new ServerSocket(port);
Socket socket = server.accept();
// 建立流读取器
InputStreamReader isReader = new InputStreamReader(socket.getInputStream());
BufferedReader reader = new BufferedReader(isReader);
PrintWriter writer = new PrintWriter(socket.getOutputStream(),true);
while(true)
{
// 读取流并回显
String line = reader.readLine();
if(line.equals("endl"))
{
writer.println("Server socket colsed !");
break;
}
writer.println(line);
}
}
}
客户端:
package socket;
import java.io.*;
import java.net.*;
import java.util.*;
public class Client
{
public static void main(String[] args) throws Exception
{
// 建立socket连接
String host = "127.0.0.1";
int port = 54321;
Socket socket = new Socket(host, port);
// 建立流读取器
InputStreamReader isReader = new InputStreamReader(socket.getInputStream());
BufferedReader reader = new BufferedReader(isReader);
PrintWriter writer = new PrintWriter(socket.getOutputStream(),true);
Scanner scanner = new Scanner(System.in);
while(true)
{
// 读取输入流并发送
String send = scanner.nextLine();
writer.println(send);
// 读取接收流并打印
String echo = reader.readLine();
System.out.println("Server echo: " + echo);
if(send.equals("endl")) break;
}
System.out.println("Client socket colsed !");
}
}
注意
需要在客户端的窗口输入,如果输入到了服务器端的窗口,那么不会有反应,在右下角点开对应的图标,会显示控制台是那个
回显功能: