Windows でのネットワーク プログラミングと Linux でのネットワーク プログラミングの違い

1. Windows でのネットワーク プログラミングと Linux でのネットワーク プログラミングの違い

(1) Socket ネットワークソケットに必要なヘッダーファイルは異なります。
  Windows システム: 通常は #include <winsock2.h> を使用します。
  Linux システム: 通常は #include <sys/socket.h> を使用します。
(2) ネットワークの初期化
  Windows システム: WSAStartup を使用して Winsock DLL の使用を開始し、ネットワークを初期化します。WSAStartup 関数は、アプリケーションまたは DLL によって呼び出される最初の Windows ソケット関数である必要があります。これにより、アプリケーションまたは DLL は、Windows ソケットの必要なバージョンを指定し、特定の Windows ソケット実装の詳細を取得できるようになります。アプリケーションまたは DLL は、WSAStartup の呼び出しが成功した後にのみ、さらに Windows ソケット関数を発行できます。一般に、初期化関数を定義することでネットワークの初期化を完了できます (追記: WSAStartup を使用する前に、ライブラリ ws2_32.lib をプロジェクトに追加する必要があります)。

//初始化网络库
#pragma comment(lib,"ws2_32.lib")
void InitNetwork() {
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;
	wVersionRequested = MAKEWORD(2, 2);

	err = WSAStartup(wVersionRequested, &wsaData);
	if (err != 0)
	{
		return;
	}
}

  Linux システム: ネットワークの初期化操作が不要
(3) Windows では書き込み読み取り機能がなく、すべてをファイルという概念がありません (非常に重要)

//linux系统下
// socket_fd 套接字;
// num			是一个int类型的变量
write(socket_fd, &num, sizeof(num));
read(socket_fd, &num, sizeof(num));
	
//因为windows下没有一切皆文件的概念,所以write函数和linux系统下不同,上面代码可以改为
send(socket_fd, (char *)&num, sizeof(num), 0);
recv(socket_fd, (char *)&num, sizeof(num), 0);

(4) ソケットを閉じます。
Windows の場合はソケット closesocket()、
Linux の場合は close()
(5) ノンブロッキングの設定
Windows システム: ioctlsocket()
Linux システム: fcntl() (ヘッダー ファイル <fcntl.h> をインクルードする必要があります)
(6) エラーコードの取得
Windowsシステム:getlasterror()/WSAGetLastError()
Linuxシステム:errno変数

2. Linux システムでのネットワーク プログラミング手順 (TCP を例にします)

サーバー:
ソケットを作成しますソケット()ソケットをサーバーの
ネットワーク情報構造体にバインドします。recv()/send() を通信してソケット close() を閉じる



クライアント:
ソケットの作成ソケット()
クライアント接続要求の送信 connect()
通信 send()/recv()
ソケットのクローズ close()

3. Windows でのネットワーク プログラミング (TCP を例にします):

Windows は、上位レベルのネットワーク API 関数と下位レベルの API 関数の両方を提供します。

1. 上位層を使用する API 関数の場合: csocket クラスを使用してオブジェクト obj を定義する場合、ネットワーク プログラミングの手順は次のとおりです。 クライアント: obj.Create()
obj.Connect
(
)
obj.Receive() またはobj.Send()
obj.Close()
サーバー側:
最初に AfxSocketInit() を呼び出してプロトコル スタックのインストールを検出します
obj.Create()
obj.Listen()
obj.Accpet()
obj.Receive() または obj.Send()
obj .閉じる()

2. 基礎となる API 関数を使用する手順は次のとおりです。
クライアント:
ネットワークを初期化します WSAStartup()
ソケットを作成しますソケット()
クライアント接続要求を送信します connect()
通信を実行します send()/recv(
)ソケットを閉じる close()

サーバー側:
ネットワークを初期化します WSAStartup()
ソケットを作成し
ます

(ブロッキング関数)
通信 recv()/send()
ソケットを閉じる close()

参考:https://www.cnblogs.com/gildoringlorin/p/3951317.html

おすすめ

転載: blog.csdn.net/AAAA202012/article/details/130237485