日期:2014-05-20  浏览次数:20714 次

怎么能够实现将一个客户端发送到服务端的消息转发到另一个客户端?
请教个问题,我在写一个聊天程序,有一个协议是  
?   SEND   orig   pseud   message

意思是   orig   是发送消息端的用户名   ,   pseud   是   接受端   的用户名,  
当服务器接收到   ?SEND   就把得到的   message   发送到   pseud   客户端

下面是为我些的一段片段,感觉肯定不对,因为   pseud   一个经连接到服务器了,可是我有建立了   服务端   ,   所以执行的时候   就告诉我   coonexion   refused   ,   各位高手来看看怎么解决阿,挺急着用的,谢谢了  


class   info{                  
private   int   port;
private   InetAddress   adr;
info(int   p   ,   InetAddress   adr){
port   =   p;
this.adr   =   adr;
}
info(){};

else   if(m1.getNthValue(0).getStringValue().equals( "SEND ")   &&   m1.getValue().getLength()==4)   {
          String   sender   =   m1.getNthValue(1).getStringValue();
          String   receive   =   m1.getNthValue(2).getStringValue();
          String   p   =   m1.getNthValue(3).getStringValue();
          info   in1   =   new   info();
          Socket   client1;
          if((in1   =   in(recieve))!=null){   //在list_quest里找符合条件的用户,并返回   info   如果没有返回   null
client1   =   new   Socket(in1.getadr(),in1.getport());//建立与接受端的连接
PrintWriter   out1   =   new   PrintWriter(client1.getOutputStream(),true);
out1.println(phrase+ "\n ");
out.println( "!   SENDACK ");
          }
else{
          out.println( "!   SENDNAK   ( "   +   recieve+ ")   not   in   ligne ");
}
}

------解决方案--------------------
因为 pseud 一个经连接到服务器了,可是我有建立了 服务端
------------------------
这是什么意思,请把问题描述清楚些,别人才能帮你
------解决方案--------------------
我只给你个思路,贴代码要贴的太长了。
1.启动客户端B的循环监听(也就是为了和服务端连接的监听)
2.客户端A发送消息给服务端
3.服务端在监听线程里判断是否接收到客户端A的信息
4.判断有信息,建立和客户端B相连接的客户端(NEW出来个客户端实例,怕麻烦就把客户端A写成可以替换IP,端口形式的客户端,直接传参数过去)
5.通过新建立的客户端发送消息给服务端(也就是所谓的客户端B)
------解决方案--------------------
orig---> 服务器----> pseud 分解成两个过程:
1: orig(客户机)-------> 服务器
2: 服务器(充当客户机)---------> pseud(充当服务器)

你能实现第一个过程,那么第二个应该没有什么大问题,注意换个端口,不要搞混了。
------解决方案--------------------
1 首先将2个客户端都连接到服务器上
2 定义一个vector 用来存储客户端A发送的消息
3 做一个循环判断如果vector里边有值的话 则读取并发送给客户端B