Socket阻塞问题

幻想波普星 2019-04-27 06:18:22
客户端代码如下:
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException, InterruptedException {
Socket client=new Socket("localhost", 7978);
BufferedReader br=new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter pw=new PrintWriter(new OutputStreamWriter(client.getOutputStream()));
//pw.println("wefwfwf");
//pw.flush();
String da=null;
while((da=br.readLine())!=null) {
System.out.println(da);
}
}
}

服务器代码如下:
public class Server implements Runnable{
private static ServerSocket serverSocket;
private static List<Socket> clients;
private static PrintWriter pw;
private static String msg;
private BufferedReader br;
private static List<String> msgs;
public Server() throws IOException {
clients=new ArrayList<>();;
serverSocket=new ServerSocket(7978);
msgs=new ArrayList<>();
msg=null;
}
@Override
public void run() {
try {
while(true) {
// System.out.println(""); 必须加这个???
if(clients.size()!=0) {
if(msgs.size()!=0) {
for(Socket client:clients) {
pw=new PrintWriter(new OutputStreamWriter(client.getOutputStream()));
pw.println(msgs.get(0));
pw.flush();
}
msgs.remove(0);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
new Thread(new Server()).start();
while(true) {
Socket client=serverSocket.accept();
msg=client.toString()+"is coming";
msgs.add(msg);
clients.add(client);
}
}
}


写了一个小的socket多线程通信demo,可以看到我注释的那个地方,为什么必须加一个这个东西,不然就阻塞了。讲道理我的PrintWrirter用的是println啊,不应该存在回车的问题的,死活想不明白,请大神执教
...全文
130 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
静看星辰变 2019-04-28
  • 打赏
  • 举报
回复
println就是会输出一个回车啊,不输出回车用print
幻想波普星 2019-04-28
  • 打赏
  • 举报
回复
已经解决,ArrayList线程不安全导致的,换成Vector

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧