0

これは私のクライアントとサーバーのコードです。

class Client1 {Client1(int no){try{文字列メッセージ; message="こんにちはこれはクライアントです"+no; byte [] b = message.getBytes(); DatagramPacket dp = new DatagramPacket(b、b.length、InetAddress.getLocalHost()、3700); DatagramSocket送信者=newDatagramSocket(); sender.send(dp); } catch(例外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++;
        }

  }

}

したがって、私が抱えている問題は1つのサーバーであり、一度に1つのクライアントしか実行されていません。代わりに、2つのクライアントが実行されている必要があります。

開始スレッド開始スレッド開始スレッドclinetのコンストラクター2の内部java.net.BindException:アドレスは既に使用されています:HELLOをバインドできませんこれはクライアント2です

だから誰かが私が間違っていることを教えてもらえますか?

4

1 に答える 1

0

クライアントを特定のポートにバインドしないでください。実装にバインド先の使用可能なポートを選択させます。

于 2012-12-21T06:31:12.753 に答える