我有一个tcp套接字,像这样发送三行
out2.println("message1\n");
out2.println("message2\n");
out2.println("message3\n");
和另一个接收和显示这些消息的tco套接字
System.out.println(in.readLine());
System.out.println(in.readLine());
System.out.println(in.readLine());
但只收到并显示第一条消息,之后发送的任何内容都不是。
编辑:这是代码
private void buttonActionPerformed(java.awt.event.ActionEvent evt) {
try {
// TODO add your handling code here:
String ipAddress = ipTextArea.getText();
sourceSocket = new Socket(ipAddress,32323);
out = new PrintWriter(sourceSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(sourceSocket.getInputStream()));
System.out.println(in.readLine());
System.out.println(in.readLine());
System.out.println(in.readLine());
} catch (UnknownHostException ex) {
Logger.getLogger(DESWashView.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(DESWashView.class.getName()).log(Level.SEVERE, null, ex);
}
}
cWashStations也是从按钮事件中调用的:
public void cWashStations(){
Thread washThread = new Thread(){
@Override
public void run(){
try {
sSocket2 = new ServerSocket(32323);
Thread stationThread = new Thread(){
@Override
public void run(){
try {
washSocket = sSocket2.accept();
out2 = new PrintWriter(washSocket.getOutputStream(), true);
in2 = new BufferedReader(new InputStreamReader(washSocket.getInputStream()));
out2.println("hello from attendant3423\n\n");
out2.flush();
out2.println("hello from attendant3423\n\n");
out2.println("1");
while(running){
}
} catch (IOException ex) {
Logger.getLogger(DESAttendantView.class.getName()).log(Level.SEVERE, null, ex);
}
}
};
stationThread.start();
} catch (IOException ex) {
Logger.getLogger(DESAttendantView.class.getName()).log(Level.SEVERE, null, ex);
}
}
};
washThread.start();
}
答案 0 :(得分:2)
如果您使用println()
,请不要在字符串末尾添加\n
。
答案 1 :(得分:0)
听起来你在某处缓冲。删除缓冲区以进行测试或刷新缓冲区。
答案 2 :(得分:0)
在out2.flush()
stationThread
答案 3 :(得分:0)
我的代码中有一些我不理解的东西,但我认为你应该在完成后刷新缓冲区(在第一条消息之后而不是在最后一条消息之后刷新的任何原因?)可能你还想在最后关闭连接?
答案 4 :(得分:0)
不是连续三个System.out.println(in.readLine())
,而是尝试在循环中完成。我有一种感觉,你输入的额外两个'\ n'被读作线条。