本帖最后由 MoeKagari 于 2014-11-01 21:31:56 编辑

解决方案 »

  1.   

    服务端A和B能通信
    服务端A和C也能通信
    那么,B想和C通信,发送消息给A,告诉A这是发送给C的,A收到后发送给C
    A只是中转站,客户端之间都是独立的,服务端起到的就是中转的作用
      

  2.   

    你两个客户端在服务器端对应两个socket对象,你只需要将socket1收到的消息再通过socket2发出去就行了。在你的消息协议中需要有接收人的定义。
      

  3.   

    LZ我也在做这个问题,自己想了一个办法搞定,希望可以帮助到你。
    B发送给服务端的第一条信息可以加上发送的对象和自己的ID,C同理,然后通过A转发给对方。
    LZ加我QQ 185313301,发代码给你,我也是今天搞定的。
      

  4.   

    package ChannelTest;import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.Socket;public class Client2 {
    private static String readline;
    public static BufferedReader is; public static void main(String[] args) {
    String SEND_OBJECT = "0";
    String Client_ID = "1";
    try {
    // 向本机的4700端口发出客户请求
    Socket socket = new Socket("127.0.0.1", 4700);
    // 由系统标准输入设备构造BufferedReader对象
    BufferedReader sin = new BufferedReader(new InputStreamReader(
    System.in));
    // 由socket对象得到输入流,并构造PrintWriter对象
    PrintWriter os = new PrintWriter(socket.getOutputStream());
    is = new BufferedReader(new InputStreamReader(
    socket.getInputStream())); os.println(Client_ID + "," + SEND_OBJECT);
    os.flush();
    readline = sin.readLine();
    Thread message = new Thread(new MessageThread1());
    message.start();
    while (!readline.equals("bye")) {
    os.println(readline);
    os.flush();
    System.out.println("Client2:" + readline);
    readline = sin.readLine();
    }
    os.close();
    is.close();
    socket.close();
    } catch (IOException e) {
    System.out.println("Error" + e);
    }
    }

    }
    class MessageThread1 implements Runnable{
    public MessageThread1(){}
    String message;
    @Override
    public void run() {
    while(true){
    try {
    message = Client2.is.readLine();
    System.out.println("Client1:" + message);
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    }}这个是我客户端的代码,客户端连接服务端就生成一个socke对象然后加入socket集合。