题目是这样的,现在有两台客户机pc1 和pc2 一台服务器router,现在pc1连接router把pc2的ip地址和端口以及想说的话信息发给router,router根据收到的信息连接
pc2并把pc1的话发给pc2,pc2收到后做出应答,同样把pc1的ip端口以及应答的话发给router,router再发给pc1 如此循环,问怎末实现?

解决方案 »

  1.   

    呵呵,路由器起了很大作用么?跟两台电脑直连有什么两样?java的socket通讯只在TCP/IP层传输,底层JDK已经实现了,你说的这需求跟一个聊天室没什么区别吧?
      

  2.   

    路由器的细节对于编程的人而言没有什么差异的,需要关心的只是socket层的IP和端口...
      

  3.   

    使用soceket主要是Ip和端口,不要强调router,直接把它当成是个连接,处理的方式还是要自己考虑的
      

  4.   

    大家帮我看看吧,我试着写了一个程序,只是一个从pc1到router到pc2的,帮我看看为什么pc2没有打印出来//**************************************  Client1就是pc1   ************************************************import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.io.StringReader;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.net.UnknownHostException;public class Client1 implements Runnable{ public void running() throws UnknownHostException, IOException, InterruptedException{

    Socket server = new Socket(InetAddress.getLocalHost(),8880);
          PrintWriter out = new PrintWriter(server.getOutputStream());
    String line = new String("Client1说hello");
    out.print(line);
    out.flush();

    } public void run() {
    // TODO Auto-generated method stub
    try {
    System.out.println("client1启动");
    running();
    System.out.println("client1关闭");

    } catch (UnknownHostException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    //**************************************  Server就是router   ************************************************
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.InetAddress;
    import java.net.ServerSocket;
    import java.net.Socket;public class Server implements Runnable{ public void running() throws IOException, InterruptedException{

    ServerSocket server = new ServerSocket(8880);

        Socket s = new Socket(InetAddress.getLocalHost(),8882);
        while(true){
    Socket client = server.accept();
        BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
        PrintWriter out = new PrintWriter(s.getOutputStream()); out.print(in.readLine());
    out.flush();
        }
    } public void run() {
    // TODO Auto-generated method stub
    try {
    System.out.println("server启动");
    running();
    System.out.println("server关闭");

    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    }
    //**************************************  Client2就是pc2   ************************************************
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.io.StringReader;
    import java.net.InetAddress;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.net.UnknownHostException;public class Client2 implements Runnable{ public void running() throws UnknownHostException, IOException, InterruptedException{

    //Socket server = new Socket(InetAddress.getLocalHost(),8882);
    ServerSocket s = new ServerSocket(8882);
    String inLine=null;
    while(true){
    Socket client2 = s.accept();
    BufferedReader in = new BufferedReader(new InputStreamReader(client2.getInputStream()));
    inLine = in.readLine();
    System.out.println(inLine);
    }
    } public void run() {
    // TODO Auto-generated method stub
    try {
    System.out.println("client2启动");
    running();
    System.out.println("client2关闭");

    } catch (UnknownHostException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    //**************************************  这是测试类   ************************************************
    public class Test { public static void main(String[] args) {

    new Thread(new Server()).start();
    new Thread(new Client1()).start();
    new Thread(new Client2()).start();
    }}
      

  5.   

    你直接PC1链接PC2就是把PC2的ip和端口告诉路由了,直接发送数据过去就行了,pc2返回结果就是返回数据
    了,这本来就是通过路由完成的,你把问题说的那么复杂。
    其实就是一个链接、通讯就可以了。
      

  6.   

    找到原因了 使用DataInputStream和DataOutputStream就好用了