2011-03-23 125 views
0

我写了一个客户端服务器程序:使单个客户端和服务器

{ 
    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(); 
    } 
    } 
} 
} 

我可以让我的PC服务器和client.If既肯定请出建议的方式。

+0

请使用代码格式功能。您帖子中的代码很难阅读。 – Mudassir 2011-03-23 05:56:49

+0

@ Mudassir改进了代码 – 2011-03-23 06:10:23

回答

1

是的,你的电脑绝对可以是服务器和客户端。但是,如何从你的代码中获得这些信息我不能说。

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

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

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

+0

改进了代码 – 2011-03-23 06:09:41

+0

@Suhail - 谢谢,这样更具可读性。为什么你使用'DatagramSocket'而不是'ServerSocket'和'Socket'有什么特别的理由? – aroth 2011-03-23 06:13:15

+0

不,没有任何特别的原因。我只是想通过消息 – 2011-03-23 06:19:01

0

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

+0

使端口号相同的工作? – 2011-03-23 06:24:45

+0

@Suhail Gupta - 不,不同。因此,例如,使用3000作为服务器发送,3001作为服务器监听,3002作为客户端发送,3003作为客户端监听。 – 2011-03-23 06:32:22