2011-10-18 20 views
2

Javaを使用して簡単なチャットプログラムを作成しようとしています。私は複数のクライアントを受け入れるTCPサーバーを作成しています。現在、クライアントからサーバーへのメッセージ。サーバーから2つのクライアントを接続する方法

  1. どのクライアントからのメッセージを他のすべてのクライアントにブロードキャストできますか?
  2. どのように2つのクライアントをペアにできますか。メッセージをお互いに送信し、受信しますか?
+0

ピアツーピアチャットをしようとしていますか? – ewok

+0

はい。クライアントからサーバーへのクライアント接続 – explorer

答えて

1

1.どのクライアントからどのようにメッセージをブロードキャストできますか?

2.How私は2つのクライアントのペアにすることができ

通知/サブスクライブ・メカニズムを使用してください。メッセージをお互いに送信し、受信しますか?

クライアントにはリッスンするサーバーソケットも必要です。

UPDATE:
サーバーは、すべてのクライアントが通知を登録するレジストリのいくつかの並べ替えを持っています。
クライアントは、メッセージを待つサーバーソケットを開きます。
クライアントがメッセージを送信したいとき、それはサーバに接続し、メッセージを送信し、サーバは、登録されたすべてのクライアントまたはメッセージを受信する特定のクライアントにメッセージを送信することができる。この部分では、サーバクライアントのサーバーソケットに接続し、メッセージを送信します。
もう1つの方法は、クライアントでサーバーソケットを開くことではなく、クライアントがポーリングしてサーバーにメッセージがあるかどうかを確認することです。

+0

クライアントがソケットを受信して​​います。サーバーから各クライアントにクライアントを接続するにはどうすればよいですか? – explorer

+0

クライアントはサーバーのソケットに接続し、サーバーにメッセージを送信します。他のクライアント/ピアからの接続を受け入れることができるように、クライアントにもサーバーソケットを開く必要があります。サーバーを仲介者の一種として使用したいのでなければ、何をしようとしていますか? – Cratylus

+0

はい。どのユーザーも他のユーザーに接続しようとすると、サーバーは通信を仲介します。サーバーは正しいターゲットを見つけてそれらに参加します。 – explorer

2

クライアントは単純なソケットで通信できます。サーバーがクライアントのIPを送信すると、クライアントのIPとTCPポート(通常は443)を使用して通信することができます。私はC言語でこのようにしていることを知っていますが、Java実装でこれを使用できるかどうかはわかりませんが、同様のことが動作します。あなたは、あなたのクライアントとの間で送受信するために送信したrecv関数を使用することができます

//#define MSG "GET/HTTP/1.0\r\n\r\n"  
char buffer[128]= "0"; 

    struct sockaddr_in  sin; 
    struct hostent   *host; 
    int       s; 

    host = gethostbyname("Clients IP"); 

    memcpy(&(sin.sin_addr), host->h_addr,host->h_length); 
    //sin.sin_addr.s_addr = inet_addr("175.41.153.196"); 
    sin.sin_family = host->h_addrtype; 
    //sin.sin_family = AF_INET; 
    sin.sin_port = htons(443); 
    // Create socket port 443 
    s = socket(AF_INET, SOCK_STREAM,0); 
    // 1. Block for server accept 
    connect(s, (struct sockaddr*)&sin,sizeof(sin));  
    // 2. Send "Hello world"  
    send(s,buffer,strlen(buffer)+1,0); 
    // 3. Block for receive 
    recv(s,buffer,sizeof(buffer),0); 
    // Print received data 


    close(s); 

    //return 0; 

0
  1. の接続を受け入れるためのServerSocketを処理するスレッドを作成します。
  2. 接続時に、クライアントがサーバーに一意の識別情報を送信するようにします。
  3. クライアントがメッセージを送信するときは、目的の受信者ID( )のIDをパラメータとして使用するか、または空にしてすべてのクライアントに送信します。