小弟准备写一个网络程序,C/S构架的,客户端的实现,有点小问题,客户端需要乱序收发信息,就是说,客户端在某一时刻是接收还是发送消息完全是随机的。
构思一种方法
客户端向服务器链接,将返回的SOCKER给2个线程,一个专门接收信息,一个专门发送信息;
但不知是否可以实现,如果可以实现,如果发送信息的同时,有信息需要接收该如何处理?

解决方案 »

  1.   

    多谢楼上各位,发现一个新问题。。当客户端的SOCKET施行CLOSE操作的时候,服务器端不断地接收到客户端发送的最后一条信息,请问如何解决
      

  2.   


    太奇怪了,都close还不断接收到。你发送后flush了么。io流close了么。
      

  3.   

    我服务端的接受代码如下
    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();
    }
      

  4.   

    我测试了下
    在客户端的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();
    }
    }
    这个是客户端的发送代码