ソケットソケットソケット関数の作成の詳細(sock_streamとsock_dgramの解析)

1584 ワード

まずソケットを作成するコードを置いて、関数の各パラメータの具体的な意味を具体的に説明します.
#include 
int socket(int domain,int type,int protocol);
-> , -1(linux)
#include 
SOCKET socket(int af,int type,int protocol);
-> socket , INVALID_SOCKET/

ここには3つのパラメータがあります(linuxの場合).
(1)、domain:ソケットで使用されるプロトコルファミリー(Protocol Family)情報;
(2)、type:ソケットデータ転送タイプ情報
(3)、protocol:コンピュータ間通信で使用されるプロトコル情報
このうち、最初のプロトコルファミリーの情報は主に以下のようなものがあるが、IPV 4プロトコルファミリー(PF_INET)が一般的である
PF_INET:IPv 4プロトコルファミリーPF_INET 6:IPv 6プロトコルファミリーPF_LOCAL:ローカル通信のUNIXプロトコルファミリーPF_PACKET:下位ソケットのプロトコルファミリー
PF_IPX:IPX Novellプロトコルファミリー
2番目のパラメータはソケットタイプで、代表的な2つです.
(1)、接続向けソケット(SOCK_STREAM)
このタイプの特徴は次のとおりです.
a、伝送中にデータが失われない
b、順番にデータを転送する(先発先達)
c、伝送されたデータにデータ境界が存在しない
「信頼性が高く、シーケンス的に伝達される、バイトベースの接続向けデータ伝送方式のソケット」とまとめることができる.
(2)、メッセージ向けソケット(SOCK_DGRAM)
このタイプの特徴は次のとおりです.
a、伝送順序ではなく高速伝送を強調する
b、転送データが紛失したり破損したりする可能性がある
c、転送データにデータ境界がある
d、伝送毎のデータサイズを制限する
「信頼性のない、順序付けされていない、データの高速伝送を目的としたソケット」とまとめることができます.
3番目のパラメータは主に1番目として、2番目のパラメータがタイプを指定できない場合の付加的なものですが、通常、私たちがよく使うソケットはこのパラメータを使用する必要はありません.0を付与すればいいです.ここでは、あまり説明しないで、2つの例を示します.
 IPv4 , :IPPROTO_TCP
int socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
 IPv4 , :IPPROTO_UDP
int socket(PF_INET,SOCK_STREAM,IPPROTO_UDP);

最後にWindowsの下でWinsockを初期化するテンプレートの書き方を添付します.
SOCKET soc=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
if(soc==INVALID_SOCKET)
    ErrorHandling("...");