Javaを使用して簡単なチャットプログラムを作成しようとしています。私は複数のクライアントを受け入れるTCPサーバーを作成しています。現在、クライアントからサーバーへのメッセージ。サーバーから2つのクライアントを接続する方法
- どのクライアントからのメッセージを他のすべてのクライアントにブロードキャストできますか?
- どのように2つのクライアントをペアにできますか。メッセージをお互いに送信し、受信しますか?
Javaを使用して簡単なチャットプログラムを作成しようとしています。私は複数のクライアントを受け入れるTCPサーバーを作成しています。現在、クライアントからサーバーへのメッセージ。サーバーから2つのクライアントを接続する方法
1.どのクライアントからどのようにメッセージをブロードキャストできますか?
2.How私は2つのクライアントのペアにすることができ
通知/サブスクライブ・メカニズムを使用してください。メッセージをお互いに送信し、受信しますか?
クライアントにはリッスンするサーバーソケットも必要です。
UPDATE:
サーバーは、すべてのクライアントが通知を登録するレジストリのいくつかの並べ替えを持っています。
クライアントは、メッセージを待つサーバーソケットを開きます。
クライアントがメッセージを送信したいとき、それはサーバに接続し、メッセージを送信し、サーバは、登録されたすべてのクライアントまたはメッセージを受信する特定のクライアントにメッセージを送信することができる。この部分では、サーバクライアントのサーバーソケットに接続し、メッセージを送信します。
もう1つの方法は、クライアントでサーバーソケットを開くことではなく、クライアントがポーリングしてサーバーにメッセージがあるかどうかを確認することです。
クライアントがソケットを受信しています。サーバーから各クライアントにクライアントを接続するにはどうすればよいですか? – explorer
クライアントはサーバーのソケットに接続し、サーバーにメッセージを送信します。他のクライアント/ピアからの接続を受け入れることができるように、クライアントにもサーバーソケットを開く必要があります。サーバーを仲介者の一種として使用したいのでなければ、何をしようとしていますか? – Cratylus
はい。どのユーザーも他のユーザーに接続しようとすると、サーバーは通信を仲介します。サーバーは正しいターゲットを見つけてそれらに参加します。 – explorer
クライアントは単純なソケットで通信できます。サーバーがクライアントの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;
。
これでは、マルチスレッドの概念を使用する必要があります。 このリンクは参考になると思います。 http://pirate.shu.edu/~wachsmut/Teaching/CSAS2214/Virtual/Lectures/chat-client-server.html
ピアツーピアチャットをしようとしていますか? – ewok
はい。クライアントからサーバーへのクライアント接続 – explorer