LinuxでTCPを作成する手順TCP プログラミングでは、クライアントとサーバー用に 2 セットのコードが必要であり、TCP を作成するプロセスは完全に一貫していません。 サーバソケット関数を使用してソケットを作成する ソケットプロパティを設定するには、setsockopt関数を使用します。 bind関数を使用してIPアドレスとポート情報をソケットにバインドし、listen関数を使用して指定されたポートをリッスンします。 accept関数を使用してクライアントの接続要求を受信する 送信/受信および読み取り/書き込み機能を使用してデータを送受信します close関数を使用してネットワーク接続を閉じ、監視します クライアントsocket関数を使用してソケットを作成し、setsockopt関数を使用してソケットのプロパティを設定します。 バインド機能を使用してIPアドレスとポート情報をバインドします 接続先のIPアドレスとポートを設定し、接続関数を使用して接続を要求します。 送信/受信および読み取り/書き込み機能を使用してデータを送受信します close関数を使用してネットワーク接続を閉じる TCP確立プロセスサンプルコードサーバ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <文字列.h> #include <fcntl.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <pthread.h> #include <time.h> #定義 MAXSIZE 128 charニュース[MAXSIZE]; int res; //関数の戻り値を受け取るために使用 void* pthread_chat(void * arg) //データを受信するためのスレッドを作成する { int confd = *(int *)arg; ながら(1) { res = recv(confd, news, sizeof(news), 0); (解像度<= 0の場合) { perror("受信"); 壊す; } printf("ニュースは: %s\n",news); memset(ニュース,0,MAXSIZE); 送信(confd,"OK",2,0); } printf("クライアントが1つ終了しました\n"); confd を閉じます。 } char *Time() //現在の時刻を取得する{ time_t タイマー; 構造体 tm *tブロック; タイマー = 時間(NULL); tblock = localtime(&timer); asctime(tblock) を返します。 } void save(char *s) //ログファイルを保存する { 整数データ; fd = open("ジャーナル",O_RDWR|O_APPEND|O_CREAT); もし(fd < 0) perror("開く"); それ以外 { char *buf = Time(); strcat(バッファ,s); 書き込み(fd,buf,MAXSIZE); lseek(fd,0,SEEK_END); (res < 0)の場合 perror("書き込み"); } } int メイン() { int sockfd = socket(AF_INET, SOCK_STREAM, 0); 構造体 sockaddr_in saddr、caddr; saddr.sin_family = AF_INET; saddr.sin_port = htons(6666); saddr.sin_addr.s_addr = inet_addr("127.0.0.1"); res = bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr)); (res < 0)の場合 perror("バインド"); listen(sockfd, 5); //ポートをリッスンする while(1) { int len = sizeof(caddr); int confd = accept(sockfd,(struct sockaddr*)&caddr, &len); if(confd < 0) { perror("受け入れる"); 続く; }それ以外 { 保存(inet_ntoa(caddr.sin_addr)); } printf("confdis:%d、ip=%s\n を受け入れます",confd,inet_ntoa(caddr.sin_addr)); pthread_t の tid です。 pthread_create(&tid, NULL, pthread_chat, &confd); } } クライアント #include <文字列.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #定義 MAXSIZE 128 charニュース[MAXSIZE]; int res; //関数の戻り値を受け取るために使用 int main() { printf("------チャットルームへようこそ-----\n"); printf("終了する場合は、--bye--\nと入力してください"); int sockfd = socket(AF_INET, SOCK_STREAM, 0); 構造体 sockaddr_in saddr; saddr.sin_family = AF_INET; saddr.sin_port = htons(6666); saddr.sin_addr.s_addr = inet_addr("127.0.0.1"); int confd = connect(sockfd,(struct sockaddr*)&saddr,sizeof(saddr)); if(confd < 0) perror("接続"); ながら(1) { printf("ニュースを入力してください\n"); fgets(ニュース、MAXSIZE、stdin); if(strncmp(ニュース,"さようなら",3) == 0) { 壊す; } 送信(sockfd、ニュース、strlen(ニュース)、0); memset(ニュース,0,MAXSIZE); recv(sockfd, ニュース, sizeof(ニュース), 0); printf("サーバーのニュースは: %s\n",news); } 閉じる(sockfd); 終了(0); } サーバーはマルチスレッド開発を使用するため、コンパイル時に -lpthread オプションを追加する必要があることに注意してください。 プログラム実行効果は次のとおりです。 Linux システムで TCP 接続を作成するプロセスに関するこの記事はこれで終わりです。Linux で TCP 接続を作成する方法に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: フォント名に従ってフォントを呼び出すと、ブラウザに必要なフォントが表示されます。
>>: SCSS スタイルのコードを 50% 削減する 14 の実践的な経験
目的カルーセルコンポーネントをカプセル化して直接使用します。具体的な内容は以下のとおりです。一般的な...
1. インデックスとは何ですか?インデックスは、ストレージ エンジンがレコードをすばやく検索するため...
マージントップの崩壊とはmargin-top の崩壊は、CSS ボックス モデルで発生する現象です。...
Mybatis ファジークエリ実装方法mybatis のリバース アシスタントは非常に使いやすく、通...
目次1. グローバルガード1.1 グローバルフロントガード1.2 グローバルポストルートガード1.3...
MySQL 起動エラーWindows 10 に MySQL をインストールする前は、net star...
ブログの正式名称は「Web log」で、中国語で「ネットワークログ」を意味します。後にブログに短縮さ...
MySQL 5.7コマンドを使用するMySQLコマンドラインクライアント1. パスワードを入力してく...
さっそく、コードを直接投稿します。具体的なコードは次のとおりです。 <!DOCTYPE htm...
1. サーブレットとは何か1.1. 正式な言葉で説明する:サーブレットは、動的な Web リソースを...
序文通常、h5 ページを作成するときは、WeChat、QQ、Weibo などのエコシステム内でトラフ...
目次DockerでTomcatをインストールするtomcatイメージを使用してコンテナを作成する(イ...
1.まずサーバーにリモート接続する2. サーバーマネージャーを開く 3役割と機能の追加 4サーバープ...
必要フィールドをクエリする場合、フィールドに同じ値を指定する必要があります。この値はハードコードする...
IE には長い間問題がありました。誰もがテストを受けたとき、誰もが笑顔でしたが、それはただのニヤニヤ...