有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java开发单一客户机和服务器

我编写了一个客户机-服务器程序:

 {
  import java.net.*;
  class verify {
  public static int serverPort=998;
  public static int clientPort=999;
  public static int buffer_size=1024;
  public static DatagramSocket ds;
  public static byte buffer[]=new byte[buffer_size];

  public static void TheServer() throws Exception { 
   int pos=0;
   while (true) {
     int c=System.in.read();
     switch(c) {
        case -1:
          System.out.println("server quits");
           return;
        case '\r':
           break;
        case '\n':
           ds.send(new DatagramPacket(buffer,pos,InetAddress.getLocalHost(),clientPort)) ;
           pos=0;
           break;
        default:
           buffer[pos++] = (byte) c;
     }
   }
  }

 public static void TheClient()throws Exception {
   while(true) {
     DatagramPacket p=new DatagramPacket(buffer,buffer.length);
     ds.receive(p);
     System.out.println(new String(p.getData(),0,p.getLength()));
   }
 }

 public static void main(String args[]) throws Exception{
  if(args.length==1) {
    ds=new DatagramSocket(serverPort);
    TheServer();
  } else {
     ds=new DatagramSocket(clientPort);
     TheClient();
    }
  }
 }
}

我可以让我的电脑同时成为服务器和客户端吗。如果是,请建议一条出路


共 (2) 个答案

  1. # 1 楼答案

    是的,你的电脑绝对可以既是服务器又是客户端。然而,我不能说如何从你的代码中到达那里

    不过,一般来说,在TheServer()中,您需要创建一个ServerSocket,并将其设置为在serverPort上侦听。然后执行类似Socket clientSocket = serverSocket.accept()的操作来等待并接受下一个传入连接

    然后在TheClient()中,在serverPort上创建一个新的Socket到“localhost”。这将连接服务器和客户端

    请注意,由于serverSocket.accept()块,服务器和客户端不能共享同一个线程。因此,您可以像现在这样运行应用程序的两个独立实例,或者使用main()TheServer()设置一个新线程,然后在调用TheClient()之前启动它

  2. # 2 楼答案

    只要客户机和服务器在不同的端口上发送和接收,就没有理由不能让客户机和服务器在同一台机器上运行。事实上,我在大学期间测试客户机/服务器应用程序时经常这样做