小弟准备写一个网络程序,C/S构架的,客户端的实现,有点小问题,客户端需要乱序收发信息,就是说,客户端在某一时刻是接收还是发送消息完全是随机的。
构思一种方法
客户端向服务器链接,将返回的SOCKER给2个线程,一个专门接收信息,一个专门发送信息;
但不知是否可以实现,如果可以实现,如果发送信息的同时,有信息需要接收该如何处理?
构思一种方法
客户端向服务器链接,将返回的SOCKER给2个线程,一个专门接收信息,一个专门发送信息;
但不知是否可以实现,如果可以实现,如果发送信息的同时,有信息需要接收该如何处理?
太奇怪了,都close还不断接收到。你发送后flush了么。io流close了么。
byte[] buffer = new byte[8192];
try {
while (true) {
if (socket.isClosed())
break;
InputStream is = socket.getInputStream();
is.read(buffer);
synchronized (lockObject) {
String Data = new String(buffer);
Data = Data.substring(0, Data.indexOf("*"));
DataList.add(new Message(socket,Data));
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
在客户端的SOCKET CLOSE以后,马上执行System.exit(0);客户端应该已经关闭了
但是服务器端仍旧收到客户端发出的最后一条消息
public void Send(String str) {
try {
OutputStream os = socket.getOutputStream();
str = str+"*";
os.write(str.getBytes());
os.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这个是客户端的发送代码