我的问题是这样的
Ssk       是一个ServerSocket对象
sk        是一个socket对象public class createConnect extends Thread
{   
    ServerSocket Ssk;
    public createConnect(ServerSocket Ssk)
    {
        this.Ssk = Ssk;
    }    public void run()
    {
        while(true)
        {
            socket sk = Ssk.accept();//建立一个链接
            .......如何确认此线程到底是与谁建立的
        }
    }
} 我的问题是,
如果有四个用户A,B,C,D
A要发送信息给B,首先发送给服务器,服务器再确定转发给B。
如此类推。
主要的问题是我不能确定线程运行后怎么建立有标志性的Socket
比如SocketA,是指服务器与A建立的链接,
SocketB是B与服务器建立的链接,如果A发送给B那么在服务器端
就是由SocketA输入再由SocketB输出。
主要的就是不知道怎么建立有标志性的socket
请问大家有没有这方面的方法可以实现这方面的功能。不需要详细的代码,只要方法就好了,如果可以用的话,追加高分 
重点是我不知道如何让服务器找出要转发的对象。
需要的是用用户名确定对象。。而不用IP和端口,你怎么可能预先知道对方的IP和端口号呢?

解决方案 »

  1.   

    ..
    既然要转发,就得在服务端建立一个Socket的列表,记录连接到此服务器上的客户端信息。比如名字等等A要发消息给B,在A发的消息里加个标志说明我是发给B的,服务端收到以后解析这个消息,知道是发给B的后,从列表里找出B,把消息发给B。不知道我理解对你的意思没 - -
      

  2.   

    主要的就是不知道怎么建立有标志性的socket ;让我做的话就是建一个类比如
    class SocketMessage
    {
       SocketMessage(Socket s,String n)
      {
        ...
      }
       Socket s;
       String name;
       .....
    }
    当服务端accept到一个socket后就 SocketMessage sA = new SocketMessage(s,"A");然后再把这个sA添加到一个列表比如ArrayList中.
      

  3.   

    谢谢Apeipo的解答,我现在试一下
      

  4.   

    我觉得既然是如果是服务器和客户端的关系,那在A、B启动的时候都应该先和服务器做一次通讯,通讯报文中带上自己的名字,服务器记录下其ip和名字的 映射关系,可以用hashtable,A要向B发送消息的话,A就向服务器 发送一次 对话请求,请求中包括要对话的客户端的名称, 服务器查询hashtable同时充当客户端向B发送该内容,我觉得应该是这样的,对于socket只发送不等待接收方式,好像是UDP吧
      

  5.   

    要想ABCD互相发送消息,首先就要4个用户与服务器创建连接,这样服务器就知道他们各自的IP地址和端口啦,服务器再创建对象,将用户名与IP地址和端口关联起来,A发送给服务器的请求中包含B用户名,服务器根据用户名查找到它的IP和端口,消息就可以转发出去了。