通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提 出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也 能及时得到服务。
单线程客户端和服务器通信
【服务器】
package test.socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class TestServer {
public static void main(String[] args) {
try {
// 服务器socket并指定端口
ServerSocket server = new ServerSocket(9999);
// 接收服务器
Socket socket = server.accept();
// 获取服务器的输入流
BufferedReader reader
= new BufferedReader(new InputStreamReader(socket.getInputStream()));
// 获取服务器的输出流
PrintWriter writer = new PrintWriter(socket.getOutputStream(),true);
// 来自键盘的输入数据
BufferedReader keyword =
new BufferedReader(new InputStreamReader(System.in));
while (true) {
// 当有输入数据的时候,ready返回true
if (reader.ready()) {
String str = reader.readLine();
System.out.println("Client: "+str);
}
// 捕获服务器另一个输入流,有数据,发送给client并打印
if (keyword.ready()) {
String keyStr = keyword.readLine();
writer.println(keyStr);
System.out.println("Server: " + keyStr);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
【客户端】
package test.