【发布时间】:2009-07-09 14:03:21
【问题描述】:
我用 Java 编写了一个简单的应用程序,其中有两个节点,每个节点都有一个 ServerSocket,它打开一个端口,监听传入的连接。每个节点运行两个线程,通过在发送第一条消息时创建的持久 TCP 套接字向另一个节点发送 1000 条消息。但是,节点不会收到全部 1000 条消息。一个可能收到 850,而另一个只收到 650。这个数字在多次运行中往往保持不变。
发送代码如下:
public void SendMsg(String dest, Message myMsg) {
Socket sendsock = null;
PrintWriter printwr = null;
try {
if(printwr == null) {
sendsock = new Socket(dest, Main.rcvport);
printwr = new PrintWriter(sendsock.getOutputStream(), true);
}
String msgtosend = myMsg.msgtype.toString() + "=" + Main.myaddy + "=" + myMsg.content + "\n";
printwr.print(msgtosend);
} catch (UnknownHostException ex) {
System.out.println(ex);
//DO: Terminate or restart
} catch (IOException ex) {
System.out.println(ex);
//DO: Terminate or restart
}
}
如果我使用,性能似乎会提高 buffwr = new BufferedWriter(printwr) 以及使用 buffwr.write(...) 而不是 printwr.print(...),尽管它似乎不是一个完整的解决方案数据丢失。没有任何异常表明没有发送数据包,所以根据发送者的说法,它们都发送成功了。
在接收端,接受的连接如下处理:
BufferedReader inbuff = new BufferedReader(new InputStreamReader(incoming.getInputStream()));
while(running) {
String rcvedln = inbuff.readLine();
if(rcvedln != null) {
count++;
System.out.println(count);
}
}
读取器和写入器的使用方式是否存在可能导致问题的问题?谢谢。
【问题讨论】:
标签: java multithreading sockets