1. Socket是啥
实际上是Java为TCP通信封装的模型对象。
TCP通信有服务端和客户端之分,Java语言为此提供了ServerSocket和Socket类。
2. 运行机制
服务端运行在一个机器的某个端口上,等待客户端来访问。
客户端向指定IP的机器的指定端口发起访问。
当服务端接收到客户端的访问请求时,会建立一个Socket来代表该客户端,通过该Socket进行输入输出操作。
客户端与服务端建立连接后,也会有一个Socket,用于输入输出操作。
3. 代码示例
首先建立一个服务端,在10000端口等待客户端连接。
/**
* Hello服务端
*/
public class HelloServerSocket {
public static void main(String[] args) throws IOException {
// 服务端Socket
ServerSocket serverSocket = new ServerSocket(10000);
// 一直运行,等待客户端请求
while (true) {
// 每当收到客户端请求,则生成一个对应的客户端Socket
Socket socket = serverSocket.accept();
// 对客户端输出Hello
PrintStream stream = new PrintStream(socket.getOutputStream());
stream.print("Hello");
// 关闭输出流和客户端
stream.close();
socket.close();
}
}
}
然后通过客户端发起访问请求:
/**
* Hello客户端
*/
public class HelloClientSocket {
public static void main(String[] args) throws UnknownHostException, IOException {
// 指定服务端IP和端口
Socket socket = new Socket("127.0.0.1", 10000);
// 获取输入流,此处包装了下,通过BufferedReader读取服务端输入内容
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println("来自服务端的问候:" + line);
}
}
}
4. 测试
先运行服务端,然后运行客户端,每次运行客户端控制台会打印:
来自服务端的问候:Hello
5. 小结
这是一个最简单的Socket通信程序了,可以发现Java的封装还是比较到位的。