2012-12-21 150 views
0

这是我的客户端和服务器的代码。多线程Udp套接字编程

类客户端1 { 客户端1(INT否) { 尝试 { 字符串消息; message =“你好,这是客户端”+不; byte [] b = message.getBytes(); DatagramPacket dp = new DatagramPacket(b,b.length,InetAddress.getLocalHost(),3700); DatagramSocket sender = new DatagramSocket(); sender.send(dp); (例外e) { System.out.println(“client shutdown”); } } }

然后我的服务器类是

类Server1的 {

int cnt=0; 
String s1; 
Server1() 
{ 

    try { 
      byte[] buffer = new byte[65536]; 
      DatagramPacket incoming = new DatagramPacket(buffer, buffer.length); 
      DatagramSocket ds = new DatagramSocket(3700); 
      ds.receive(incoming); 
      byte[] data = incoming.getData(); 
      String s = new String(data, 0, incoming.getLength()); 
      System.out.println("Port" + incoming.getPort() + " on " + incoming.getAddress() + " sent this message:"); 

      System.out.println(s.toUpperCase()); 
      } 

      catch (IOException e) 
      { 
      System.err.println(e); 
      } 
} 

}

然后我可以运行实现

类prothread实现Runnable {

//long time=0; 
    //int portno; 
    int flag=0; // this is to differentiate between a server and client 
    private String capitalizedSentence; 
prothread(long l) 
{ 
    if(l==1) 
     { // it is a server 
      flag=1; 
     } 
     else 
     { 
      flag=(int) l; 
     } 
} 

@Override 
public void run(){ 
    // TODO Auto-generated method stub 

     System.out.println("Starting thread");  
     if(flag==1)// Code for server 
      { 
      Server1 s=new Server1(); 

      } 
      else // code for client 
      {     
       Client1 c=new Client1(flag); 

      } 

    } 

}

最后其部署此客户端和服务器类是

公共类Samplepro31 {

public static void main(String[] args) { 
    // First i'm going to create a server and then clients for it 
     int i=1; 
     int cnt=0; 

     prothread[] p; 
     Thread[] th; 
     Random r =new Random(); 
     // Array has been declared 
     p=new prothread[10];// Memory allocated to it 
     th= new Thread[1000]; 
     p[0]=new prothread(1); 
     cnt=1; 
     //p[0].setportno(cnt); 
     th[0]=new Thread(p[0]); 
     th[0].start(); 
     while(cnt<3) 
     { 

       p[cnt]=new prothread(cnt); 
       // here send the port number 
       th[cnt]=new Thread(p[cnt]); 
       //p[cnt1].setportno(cnt1); 
       th[cnt].start(); 
       cnt++; 
     } 

    } 

}

所以问题我有一台服务器并且只有一个客户端在运行 而不是2个客户端应该运行o/p我是得到的是:

启动线程 启动线程 启动线程 内部客户为例的构造函数2 java.net.BindException:使用地址已:无法绑定 HELLO THIS IS CLIENT 2

那么有谁能够告诉我什么我做错了?

回答

0

不要将客户端绑定到任何特定端口。让实现选择一个可用端口进行绑定。