Cソケットを使用してサーバークライアントアプリケーションを作成します。
メインディレクトリにプロジェクトとCDをクローンします。
端末を開き、次のコマンドでサーバーをセットアップします。
./server [port]このような結果を得る必要があります:
Listening on 0.0.0.0:8080その後、このコマンドを使用してクライアントでサーバーに接続します。
./client [IP] [port]ソケットプログラミングは、ネットワーク上の2つのノードを接続して相互に通信する方法です。 1つのソケット(ノード)がIPの特定のポートに耳を傾け、他のソケットは他のソケットに手を伸ばして接続を形成します。サーバーはリスナーソケットを形成し、クライアントはサーバーに手を伸ばします。
int sockfd = socket ( domain , type , protocol ) int bind ( int sockfd , const struct sockaddr * addr , socklen_t addrlen );ソケットの作成後、バインド関数はソケットをアドレスにバインドし、ADDRで指定されたポート番号(カスタムデータ構造)をバインドします。サンプルコードでは、サーバーをローカルホストにバインドするため、INADDR_ANYを使用してIPアドレスを指定します。
int listen ( int sockfd , int backlog );サーバーソケットをパッシブモードに配置し、クライアントがサーバーにアプローチして接続を行うのを待ちます。バックログは、SockFDの保留中の接続のキューが成長する可能性のある最大長を定義します。キューがいっぱいになったときに接続要求が届くと、クライアントはeconnrefusedの指標を伴うエラーを受信する場合があります。
int new_socket = accept ( int sockfd , struct sockaddr * addr , socklen_t * addrlen );リスニングソケットの保留中の接続のキューに最初の接続要求を抽出し、SockFDを作成し、新しい接続ソケットを作成し、そのソケットを参照して新しいファイル記述子を返します。この時点で、クライアントとサーバーの間に接続が確立され、データを転送する準備が整います。
int connect ( int sockfd , const struct sockaddr * addr , socklen_t addrlen );connect()システムコールは、ファイル記述子Sockfdで言及されたソケットをAddrで指定したアドレスに接続します。サーバーのアドレスとポートはADDRで指定されています。
pthread_t thread_id ;
pthread_create ( & thread_id , NULL , client_handler , ( void * ) & client_socket );pthreadを使用して、各クライアントのスレッドを作成し、特定の方法でそれらを処理します。