日期:2014-05-19  浏览次数:20720 次

Socket服务器的信息转发功能
我的问题是这样的
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和端口号呢?


------解决方案--------------------
主要的就是不知道怎么建立有标志性的socket ;

让我做的话就是建一个类比如
class SocketMessage
{
SocketMessage(Socket s,String n)
{
...
}
Socket s;
String name;
.....
}
当服务端accept到一个socket后就 SocketMessage sA = new SocketMessage(s,"A");

然后再把这个sA添加到一个列表比如ArrayList中.
------解决方案--------------------
要想ABCD互相发送消息,首先就要4个用户与服务器创建连接,这样服务器就知道他们各自的IP地址和端口啦,服务器再创建对象,将用户名与IP地址和端口关联起来,A发送给服务器的请求中包含B用户名,服务器根据用户名查找到它的IP和端口,消息就可以转发出去了。
------解决方案--------------------
消息,消息中带有名字就ok,晕,搞那么复杂