LinuxネットワークプログラミングTCP通信プロセスの構築
3645 ワード
TCPカスタマーサービス端末の構築プロセス
1.tcp通信socket関数インタフェースの作成
int socket(int domain ,int type ,int protocol);
return value:new socket(新しいネットワークファイル記述子)の正常な戻りに失敗error-1の戻りに失敗しました
2.サーバ情報#includeサーバ情報構造ヘッダファイルの設定
linux端末環境でサーバ情報構造体を表示するコマンド:gedit/usr/include/linux/in.h
/* Structure describing an Internet (IP) socket address. */
構造体はネットワークのsocketアドレスを記述する
/*/ネットワークIPアドレス/
------------------IPアドレス変換関数-----------
ipアドレスの一般的な形式は文字列で、整形コンピュータの識別を必要とします
---------------サイズ端の変換----------注意:ネットワーク通信はいずれも大端フォーマットで通信され、データの整合性を目的としている
#include
3.ネットワークサーバへのリンク
NAME
SYNOPSIS
パラメータ1:int sockfdリンクが必要なネットワーク記述子
パラメータ2:const strunct sockaddr*addrサーバのIPアドレス情報(構造体記述のsockeアドレス)
パラメータ3:socklen_t addrlenサーバIPアドレス情報の大きさ(構造体の大きさ)
戻り値:0成功-1失敗
4.データの読み書きを行うread/write socketネットワーク記述子は、通常のネットワーク記述子と同様に、読み書き操作を行ってもよい.もちろん、書き込まれた情報は別のIPホストに伝達され、読み出しはそのフィードバック情報を受け取って読み書き操作を利用して通信する.
1)ネットワーク通信記述子を読み取るときにデータがないとリードがブロックされる2)ネットワーク通信記述子への書き込みが絶えずデータを読み取る人がいない場合,書き込みがいっぱいになるとブロックされる3)通信が確立されると,ある一方のポートがリンクを切断し,我々のリード操作がブロックされない.
5.通信を閉じる
TCP通信におけるサーバ側の構築プロセス
1.tcp通信socketを作成通信sockeを作成ネットワーク記述子を取得するクライアント操作と同様
2.ローカルネットワークにおけるサーバの情報のバインド
パラメータ1:バインドが必要なサーバsocket
パラメータ2:サーバーのIPアドレス情報
パラメータ3:サーバのIPアドレス情報の大きさ
戻り値:成功0失敗-1
/* Address to accept any incoming messages.*/万はIPアドレスを使って、サーバーに自動的にローカルのネットカードのアドレスのIPアドレスの設計を傍受してバインドさせます0.0.0.0システムは自動的にローカルのIPを検出します
3.リスニングモードに設定
サービス側をリスニングモードに設定し、カスタマーサービス側のリンク情報の到来を待って、その情報を受け入れる.
パラメータ1:リスニングサービスsocketが必要
パラメータ2:最大リスニング数(同時に複数のリンクを受け入れることができます)
戻り値:成功0失敗-1
4.相手のリンク要求を受け入れる(クライアントがリンクされていない場合はacceptまたはクライアントがリンクされるまでブロックする)
NAME
SYNOPSIS
パラメータ1:リスニングモードサーバsocket
パラメータ2:相手のIPアドレス情報(ipアドレス情報を受け入れる構造体を定義する必要がある)
パラメータ3:相手の情報の保存に成功したサイズ
戻り値:正常accepted socket(クライアントネットワーク記述子の受信)失敗-1
このように私达は客服の端とサービスの端を构筑して、両者の间は3回の握手を経てネットの通信をプロセスすることができて、私达の注意に値するのは、3回の握手はconnectの中で発生します.
1.tcp通信socket関数インタフェースの作成
int socket(int domain ,int type ,int protocol);
: AF_INET IPV4 Internet protocols
: SOCK_STREAM TCP
SOCK_DGRAM DUP
: 0
return value:new socket(新しいネットワークファイル記述子)の正常な戻りに失敗error-1の戻りに失敗しました
2.サーバ情報#includeサーバ情報構造ヘッダファイルの設定
linux端末環境でサーバ情報構造体を表示するコマンド:gedit/usr/include/linux/in.h
/* Structure describing an Internet (IP) socket address. */
構造体はネットワークのsocketアドレスを記述する
struct sockaddr_in {
__kernel_sa_family_tsin_family;/* */
__be16sin_port;/* */ /* 100 , 1000 */
struct in_addrsin_addr;/* IP */
}
/*/ネットワークIPアドレス/
struct in_addr {
__be32s_addr;
};
------------------IPアドレス変換関数-----------
#include
#include
#include
in_addr_t inet_addr(const char *cp); // IP
char *inet_ntoa(struct in_addr in); // IP
ipアドレスの一般的な形式は文字列で、整形コンピュータの識別を必要とします
---------------サイズ端の変換----------注意:ネットワーク通信はいずれも大端フォーマットで通信され、データの整合性を目的としている
#include
uint16_t htons(uint16_t hostshort); // -》
uint16_t ntohs(uint16_t netshort);// -》
3.ネットワークサーバへのリンク
NAME
connect - initiate a connection on a socket
SYNOPSIS
#include /* See NOTES */
#include
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
パラメータ1:int sockfdリンクが必要なネットワーク記述子
パラメータ2:const strunct sockaddr*addrサーバのIPアドレス情報(構造体記述のsockeアドレス)
パラメータ3:socklen_t addrlenサーバIPアドレス情報の大きさ(構造体の大きさ)
戻り値:0成功-1失敗
4.データの読み書きを行うread/write socketネットワーク記述子は、通常のネットワーク記述子と同様に、読み書き操作を行ってもよい.もちろん、書き込まれた情報は別のIPホストに伝達され、読み出しはそのフィードバック情報を受け取って読み書き操作を利用して通信する.
1)ネットワーク通信記述子を読み取るときにデータがないとリードがブロックされる2)ネットワーク通信記述子への書き込みが絶えずデータを読み取る人がいない場合,書き込みがいっぱいになるとブロックされる3)通信が確立されると,ある一方のポートがリンクを切断し,我々のリード操作がブロックされない.
5.通信を閉じる
TCP通信におけるサーバ側の構築プロセス
1.tcp通信socketを作成通信sockeを作成ネットワーク記述子を取得するクライアント操作と同様
2.ローカルネットワークにおけるサーバの情報のバインド
#include /* See NOTES */
#include
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
パラメータ1:バインドが必要なサーバsocket
パラメータ2:サーバーのIPアドレス情報
パラメータ3:サーバのIPアドレス情報の大きさ
戻り値:成功0失敗-1
/* Address to accept any incoming messages.*/万はIPアドレスを使って、サーバーに自動的にローカルのネットカードのアドレスのIPアドレスの設計を傍受してバインドさせます0.0.0.0システムは自動的にローカルのIPを検出します
#defineINADDR_ANY((unsigned long int) 0x00000000)
3.リスニングモードに設定
サービス側をリスニングモードに設定し、カスタマーサービス側のリンク情報の到来を待って、その情報を受け入れる.
#include /* See NOTES */
#include
int listen(int sockfd, int backlog);
パラメータ1:リスニングサービスsocketが必要
パラメータ2:最大リスニング数(同時に複数のリンクを受け入れることができます)
戻り値:成功0失敗-1
4.相手のリンク要求を受け入れる(クライアントがリンクされていない場合はacceptまたはクライアントがリンクされるまでブロックする)
NAME
accept - accept a connection on a socket
SYNOPSIS
#include /* See NOTES */
#include
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
パラメータ1:リスニングモードサーバsocket
パラメータ2:相手のIPアドレス情報(ipアドレス情報を受け入れる構造体を定義する必要がある)
パラメータ3:相手の情報の保存に成功したサイズ
戻り値:正常accepted socket(クライアントネットワーク記述子の受信)失敗-1
このように私达は客服の端とサービスの端を构筑して、両者の间は3回の握手を経てネットの通信をプロセスすることができて、私达の注意に値するのは、3回の握手はconnectの中で発生します.