一、socket双向通信的问题
在上篇博客中,利用socket 实现了一个非常简单的服务端和客户端通信的小程序,**但仔细思考一下,这其中有什么问题呢?**还是先把上篇博客的代码贴出来吧(为了说明问题,代码有的地方稍有改变,只是写法不同而已)
1.服务端
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class SocketServer {
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(10086);
Socket socket = serverSocket.accept();
System.out.println("one client has conneted server,"+socket.getRemoteSocketAddress());
while (true){
System.out.println("wait data...");
//接受
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("[client]:"+br.readLine());
System.out.println("wait write...");
//发送
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
bw.write(str);
bw.write("\n");//约定一个结束标记,告诉客户端我这条数据发完了,你可以读了
bw.flush();
System.out.println("data sent..");
}
}yi
}
客户端:
2.客户端:
```bash
import java.io.*;
import java.net

本文探讨了Java Socket在双向通信时遇到的阻塞问题,并通过多线程解决方案来实现非阻塞的一对一聊天。分析了socket在accept()和输入输出流时的阻塞情况,并给出了服务端和客户端的多线程代码示例,以实现连续的读写操作。
最低0.47元/天 解锁文章
1046

被折叠的 条评论
为什么被折叠?



