Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> TCPプログラミング関数とステップの詳細

TCPプログラミング関数とステップの詳細

  

TCPプログラミングサーバ側の一般的なステップは

1、ソケットの作成、関数socket()の使用、

2、ソケットプロパティの設定、関数の使用です。 Setsockopt(); * optional

3、IPアドレス、ポート、およびその他の情報をソケットにバインドする、関数bind()を使用する、

4、リスナーを開く、関数listen()を使用する

5、クライアントからの接続を受け取る、関数accept()を使う、

6、データを送受信する、関数send()とrecv()、read()とwrite()を使う;

7、ネットワーク接続を閉じる、

8、リスナーを閉じる、

TCPプログラミングクライアントの一般的な手順は次のとおりです。

1、ソケットを作成する関数socket()を使用する。

2、socketプロパティを設定する、関数setsockopt();を使用する* optional

3、関数を使用してIPアドレス、ポート、およびその他の情報をソケットにバインドするBind(); *オプション

4.接続する相手のIPアドレスとポートを設定します。

5.サーバーに接続して関数connect()を使用します。

6、データの送受信、関数send()とrecv()、またはread()とwrite()の使用;

7、ネットワーク接続の切断;

UDPプログラムのサーバー側の一般的な手順は次のとおりです。

1、ソケットの作成、関数socket()の使用、

2、ソケットプロパティの設定、関数setsockopt()の使用; *オプション

3. IPアドレス、ポート、およびその他の情報をソケットにバインドしますデータを周期的に受信するには関数bind()を使用し、ネットワークを閉じるには関数recvfrom()を使用します。

5を使用します。接続;

UDPプログラミングクライアントの一般的な手順は次のとおりです。

1、ソケットを作成し、関数socket()を使用します。

2、ソケットプロパティを設定し、関数setsockoptを使用します。 (); *省略可能

3、IPアドレス、ポート、およびその他の情報をソケットにバインドし、関数bind()を使用します。*省略可能

4、相手のIPアドレスおよびポートを設定しますその他の属性、

5、データの送信、関数sendto()の使用、

6、ネットワーク接続のクローズ、

一般的なネットワークコマンド:netstatコマンドnetstatコマンドを使用して表示します。ネットワーク接続、ルーティングテーブル、インターフェースの統計、その他のネットワーク情報Netstatにはたくさんのオプションがあります - 私たちの一般的に使用されるオプションは詳細なネットワークステータスを表示するための-anですその他のオプションに関してはhelpを使用できます

telnettelnet isリモコン用はじめにしかし、このプログラムを使用してサーバープログラムをデバッグすることができますたとえば、サーバープログラムはポート8888をリッスンしているので、telnet localhost 8888を使用してサーバーのステータスをチェックできます。

data structure1、address構造体sockaddr_in {short int sin_family; /*アドレスファミリは通常AF-INET * /unsigned short int sin_port; /*ポート番号* /struct in_addr sin_addr; /* IPアドレス* /unsigned char sin_zero [8]; /* padding memset()またはbzero()を使用して* /}を埋めるstruct sockaddrと同じサイズを保持するには、0を指定します。 * 14バイトのプロトコルアドレス* /

};

2、DNS構造体struct hostent {char * h_name; /*ホストの正式なドメイン名* /char ** h_aliases; /* one NULLで終了するホスト別名配列* /int h_addrtype; /*インターネット環境で返されるアドレスの種類はAF-INET * /int h_length; /*アドレスバイト長* /char ** h_addr_list; /* oneホストのすべてのアドレスを含む0で終わる配列* /}。

操作関数

1、socket:

ソケット記述子の作成

int socket(intドメイン、int型、intプロトコル); domain = AF_INETソケットのタイプ、type = SOCK_STREAMまたはSOCK_DGRAM(それぞれTCP接続およびUDP接続を表す)、protocol = 0。

整数のソケット記述子を返します。

2.bind:

ソケット記述子をローカルマシンのポートに関連付ける(サーバーのみ)

int bind(int sockfd、struct sockaddr) * my_addr、int addrlen);

Sockfdはソケット記述子で、my_addrはローカルIPアドレスやポート番号などの情報を含むsockaddr型へのポインタです; addrlen = sizeof(struct sockaddr)。戻り値:成功= 0、失敗= -1、errno =エラー番号。次の割り当てを使用して、ローカルIPアドレスを自動的に取得し、未使用のポート番号をランダムに取得することができます。my_addr.sin_port = 0; /*システムは未使用のポート番号をランダムに選択します。* /my_addr.sin_addr.s_addr = INADDR_ANY; /*ローカルIPアドレスを入力します。* /

3.Connect:

リモートサーバーとのTCP接続を作成します(クライアント用)。int connect(int sockfd、struct sockaddr * serv_addr) 、int addrlen); Sockfdは宛先サーバーのソケット記述子です。serv_addrは宛先IPアドレスとポート番号を含むポインターです。戻り値:成功= 0、失敗= -1、errno =エラー番号。

4、Listen:

bind()の後にint listen(int sockfd、int backlog)のサービス要求があるかどうかをリスターします; SockfdはSocketシステムコールによって返されるソケット記述子です。リクエストキューで許可されるリクエストの最大数を指定しますデフォルトは20です。戻り値:成功= 0、失敗= -1、errno =エラー番号。

5.accept:

クライアントからのリクエストを受け付けるint accept(int sockfd、void * addr、int * addrlen); sockfdはリスンされたソケット記述子で、addrはsockaddr_in変数を指しています。クライアントのホストに関する情報を保持するポインタ; addrtenはsizeof(struct sockaddr_in)の整数ポインタ変数を指します。戻り値:この新しい接続が使用するための新しいソケット記述子が正常に返されました。エラーが発生した場合は-1を返し、対応するerrno値を設定します。

6.Send:

情報を送信するソケット(TCP)ソケットモードの場合int send(int sockfd、const void * msg、int len、int flags); Sockfdは送信に使用されます。データのソケット記述子msgは、送信されるデータへのポインタです。 Lenはデータの長さ(バイト数)です。フラグは通常0に設定されています。

7.recv:

ソケット(TCP)ソケットモードでデータを受信する

int recv(int sockfd、void * buf、int len、unsigned int flags) Sockfdはデータを受け入れるソケット記述子、bufは受信データを保持するバッファー、lenはバッファーの長さです。フラグもゼロに設定されています。戻り値:実際に受信したバイト数、または接続が中断された場合は0エラーが発生した場合は-1を返し、対応するerrno値を設定してください。

8.sendto:

ソケットレス(UDP)ソケットモードでデータを送信するint sendto(int sockfd、const void * msg、int len、unsigned intのフラグ、const struct sockaddr * to、int tolen);宛先マシンのIPアドレスとポート番号の情報を示すtolen = sizeof(struct sockaddr)。戻り値:実際に送信されたデータバイトの長さ、または送信エラーが発生した場合は-1

9.Recvfrom()

ソケットレス(UDP)ソケットモードでデータを受信するint recvfrom(int sockfd、void * buf、int len、unsigned intフラグ、struct sockaddr * from) 、int * fromlen);送信元IPアドレスとポート番号を保存します。 Fromlen = sizeof(struct sockaddr)戻り値:fromに実際に格納されているデータのバイト数。エラーが発生した場合は-1を返し、対応するerrnoを設定します。

10.close()

ソケットを解放し、データ操作を閉じる(sockfd);

11.shutdown:

片方向接続int Shutdown(int sockfd、int how); howは以下の値に設定することができます:· 0 -------データの受信を継続しない· 1 -------データの送信を継続しません&2- ------データの送受信を続けないようにする許可されている場合、操作が成功するとclose()shutdownを呼び出して0を返し、エラーが発生すると-1を返します(対応するerrnoを連結します)。

12. gethostbyname:

ドメイン名とIPアドレスの変換struct hostent * gethostbyname(const char * name);

13.inet_pton関数:

ドット付き10進数文字列をネットワークバイトオーダーのバイナリ値に変換しますこの関数は、IPv4アドレスとIPv6アドレスの両方を処理できます。 Int inet_pton(intファミリー、const char * strptr、void * addrptr);

最初のパラメータはAF_INETまたはAF_INET6です。2番目のパラメータはドット付き10進数文字列へのポインタです。3番目のパラメータ変換されたネットワークエンディアンのバイナリ値へのポインタです。戻り値:1 ---成功した0 ---入力が有効な式ではないformat-1 ---失敗した

14.inet_ntop関数:

inet_pton関数の逆、inet_ntop関数はネットワークバイトオーダーのバイナリ値は、ドット付き10進数文字列に変換されます。 const char * inet_ntop(intファミリー、const void * addrptr、char * strptr、size_t len);

最初のパラメータはAF_INETまたはAF_INET6です:2番目のパラメータはネットワークバイトオーダーを指すバイナリです。値へのポインタ、3番目の引数は変換されたドット付き10進文字列へのポインタ、4番目の引数は関数が呼び出し側のバッファをオーバーフローしないようにターゲットのサイズです。戻り値:結果へのポインタ---成功NULL - 失敗した


Copyright © Windowsの知識 All Rights Reserved