下边是我一个实际项目中的代码,实现一个线程的run(),socket服务器端的,
public void run() {
try {
//监听用户连接
socket = server.accept();
outStream = new DataOutputStream(socket.getOutputStream());
inStream = new DataInputStream(socket.getInputStream());
//服务器准备好,可以进行通讯
System.out.println("SocketListener: the Socket Client connected !"); while (true) {
//读取从客户端发送的信息
String message = inStream.readUTF(); //生成线程处理收到的消息
MessageProcessor mp = new MessageProcessor(comminfo, message);
mp.start(); //System.out.println("The server receive String:"+str); //将信息重新向客户端发送
outStream.writeUTF("The Socket Server has got your message !"); }
} catch (IOException ex) {
System.out.println(
"SocketListener: the Socket Client disconnected !");
this.run();
} catch (Exception ex) {
System.out.println("SocketListener: " + ex.toString());
this.run();
}
}

解决方案 »

  1.   

    最简单的答案就是:直接用就可以了,当然你要能够得到那个连接的引用
    好一点的方法是把通信内容封装成类,在建立连接的线程里用一个synchornizedList保存
    而通信仍然由建立连接的线程自己负责,这样可以避免同步问题。
    如果你给出你的线程和类的设计结构的话,大家应该能给出具体的建议
      

  2.   

    具体来说,我的SERVER端负责两个任务:1、和CLIENT(应该算另外一个SERVER吧)建立连接。2、监听WEB端的服务请求。现在我的问题是:当收到WEB的数据后,又怎样把监听WEB线程的数据发送给监听CLIENT的线程呢?需要实现线程的切换吗?谢谢了,我真的不懂,很菜的。
      

  3.   

    TO:bigcrazy(大疯狂) 我同意这种作法。不过还有没有更好的方法呢?
      

  4.   

    搞了一天了都还没结果,郁闷ING……
    谁能帮我搞定他?
      

  5.   

    在ACE里面主动对象的通信就是通过消息队列的方式来实现的,我觉得这个方法已经很清晰了
    你能说说你觉得这种方法哪里不好吗?
      

  6.   

    我的理解是开辟一个公有的BUFFER区,两个线程都对他进行操作。
    不知道是不是哦。