まずプログラムのTCPサーバ側を見てください。
#include< stdlib.h> #include< stdio.h> #include< errno.h> #include<; string.h> #include< netdb.h> #include< sys /types.h> #include< netinet /in.h> #include< sys /socket.h> #define portnumber 3333 //サーバーのポート番号とクライアントのポート番号は等しくなければなりません。
int main(int argc、char * argv []){int sockfd、new_fd; struct sockaddr_in server_addr; struct sockaddr_in client_addr; int sin_size; int nbytes; char buffer [1024]; /*サーバー側は、sockfd記述子の構築を開始する*(if(sockfd = socket(AF_INET、SOCK_STREAM、0))== - 1)//AF_INET:IPV4; SOCK_STREAM:TCP {fprintf(stderr、")ソケットエラー:%s \\ n \\ a"、strerror(errno)); exit(1);} /*サーバーサイドのフィルsockaddr構造体* /bzero(& server_addr、sizeof(struct sockaddr_in)); //初期化、設定0server_addr.sin_family = AF_INET; //Internetserver_addr.sin_addr.s_addr = htonl(INADDR_ANY); //(このマシンになります)長いデータはネットワーク上の長いデータに変換されます)。//ホスト通信//INADDR_ANYはすべてのIPアドレスのデータを受信できることを意味します、つまりすべてのIPserver_addr.sin_port = htons(portnumber); //(このマシンでは短くなります)データはネットワーク上で短いデータに変換されます。)ポート番号/* sockfd記述子をIPアドレスにバンドル* /if(bind(sockfd、(struct sockaddr *)(& server_addr)、sizeof(struct sockaddr))== - 1) {fprintf(stderr、 "バインドエラー:%s \\ n \\ a"、strerror(errno)); exit(1);} /*接続を許可されるクライアントの最大数を設定します* /if(listen(sockfd、5)= = -1){fprintf(stderr、"リスンエラー:%s \\ n \\ a"、strerror(errno)); exit(1);} while(1){/*クライアントが接続を確立するまでサーバーはブロックされます* /sin_size = sizeof(struct sockaddr_in); if((new_fd = accept(sockfd、(struct sockaddr *)(& client_addr)、& sin_size))== - 1){fprintf(stderr、"エラーを許可:% s \\ n \\ a "、strerror(errno)); exit(1);} fprintf(stderr、"サーバは%sから接続を取得\\ n "、inet_ntoa(client_addr.sin_addr)); //ネットワークアドレスを次のように変換します。 。 String if((nbytes = read(new_fd、buffer、1024))== - 1)//これは、((nbytes = recv(new_fd、buffer、1024,0))== - 1)のように書くことができます。関数fprintf(stderrに、"読み取りエラー:%S \\ n",はstrerror(errnoに));出口(1);} [nバイト] = '\\ 0' バッファとのprintf(" Serverは;,%S \\ N"バッファを受け/*この通信は終了しました* /close(new_fd); /* Loop next * /} /*通信を終了します* /close(sockfd); exit(0);} クライアントのプログラムを確認します。 BR>の#include< STDLIB.H>の#include< stdio.hの>の#include< ERRNO.H>の#include< string.hの>の#include< netdb.h>の#include< SYS /タイプ。 H>の#include< netinetの/in.h>の#include< SYS /socket.hに>の#defineポート番号3333intメイン(int型ARGC、CHAR * ARGV []){int型数sockfd; char型バッファ[1024];構造体のsockaddr_in SERVER_ADDR;構造体たhostent *ホスト; /*使用ホスト名のクエリホスト名* /IF(ARGC = 2!){関数fprintf(stderrに、"使用:\\ \\%sのホスト名N",のargv [0]);出口(1);}もし、((ホスト=のgethostbyname(ARGV [1]))== NULL){関数fprintf(stderrに、"のgethostnameエラー\\ n");出口(1);} /TCP {fprintfの(stderrに、"ソケットエラー:%sの、SOCK_STREAMインターネット://AF_INET - *クライアントが数sockfdディスクリプタ* /IF(1(数sockfd =ソケット(AF_INET、SOCK_STREAM、0))==)を確立するために開始されます\\ \\ N",はstrerror(errnoに));出口(1);} /*クライアント充填サーバ情報* /BZERO(&#038; SERVER_ADDR、はsizeof(SERVER_ADDR)); //初期化カウンタ0server_addr.sin_family = AF_INET; //IPV4server_addr.sin_port = htons(ポート番号); //ポート番号server_addr.sin_addr(ネットワーク上の短いデータにこのマシン上で短いデータ)= *((構造体in_addr形式*)宿主 - > h_addr)。接続エラー; {fprintfの(stderrに、" -; //IPアドレス/*クライアントが接続要求* /(1 SERVER_ADDR)、はsizeof(sockaddr構造体))==(接続数sockfd、(sockaddr構造体の*)(&#038)場合を開始します:%S \\ \\ N",はstrerror(errnoに));出口(1);} /*接続が成功する* /のprintf("を入力してくださいチャー:\\ N"); /*データを送信する* /関数fgets(バッファ、1024、STDIN)は、書き込み(数sockfd、バッファ、strlenを(バッファ)); //ここで送信(数sockfd、バッファ、strlenを(バッファ)のように書くことができ、0); /*エンド通信* /クローズ(数sockfd)。終了(0);} 実行シーケンスの結果は:(注を次のようにソケットソケットクライアントとサーバが使用してtcp_serverコンパイラhi3515 gccのtcp_server.c -o上の別のサーバー仮想マシンクライアント上にあるように思わアームhismall- Linux-gcc tcp_client.c -o tcp_hiclientでプログラムをコンパイルします。サーバー:
クライアント:
マウサー 1、発光ダイオードとは 発光ダイオードは、日常の電化製品に広く普及しているもので、直径3mm、5mm、2倍、5倍の長方形の光、赤、緑、黄色などを放射します。の通常のダイオードと同様に、L
Linuxでプログラムを追加および削除するのは非常に面倒ですソフトウェアのインストールは、ソフトウェアをインストールするための最も簡単なダブルクリックrpmパッケージを除いて、奇妙と言えます。 mak
.linuxデバイスドライバの役割 カーネル:ハードウェアとソフトウェアのリソースを管理し、実行環境を提供するために使用されます。 4G仮想空間の割り当てなど。 linuxデバイスドライバ:接
Linuxシステムの正常な動作を保証し、発生したさまざまなシステムの問題を正確に解決するためには、システム管理者がログファイルを注意深く読むことが非常に重要です。 。この記事では、ログファイルとは何か
下でのWindows 7の起動画面のパフォーマンスの後にブラック
Windows 7の修復システムはどのようにハードディスクのアイコンを表示することはできません
ワンクリックのUディスクローディングシステムのダウンロード添付のUディスクローディングシステムのチュートリアル
win10はこのコンピュータとコントロールパネルをデスクトップにどのように表示しますか?
Win7ワイヤレスネットワークに接続して制限付きアクセス権を表示する方法
どうすればいいですか?Win10最新プレビューバージョン10525システムより高価なメモリにアップグレードする方法?1933の朝に