【C/C++】WinSockライブラリを使用したネットワークプログラミング

WinSockとは

Windows Socket API ライブラリのこと。

バークレーソケットライブラリとの互換性をできるだけ保ちつつ、Microsoft社がWindows用に拡張したAPIライブラリである。

WinSockで使用できるプロトコル

IP

IPとは、インターネット・プロトコルの略であり、インターネット上でパケットをやり取りするときの約束事を定めた通信規約のことです。
インターネット上でやり取りされるデータは全てIPパケットです。
後述するTCPやUDPは、このIPパケットを利用し、通信をおこないます。

TCP

TCPとは、トランスミッション・コントロール・プロトコルの略であり、信頼性重視の通信規約です。
(パケット到達保障する分、速度が遅い)

<概要>

送信したパケットが相手に届いているかを確認しながら通信します。
紛失したパケットの再送、順番が入れ替わってしまったパケットを正しく並び替える作業などを自動で行ってくれます。

また、パケットロスの原因となる通信路の渋滞(輻輳という)を防止するため、送信速度も制御します。

UDP

UDPとは、ユーザ・データグラム・プロトコルの略であり、速度重視の通信規約です。
(パケット到達保障しない分、速度が速い)

<概要>

送信したパケットが相手に届いているかを確認しません。
パケットの順番も入れ替わっている可能性があります。

速度が求められるアプリケーション、もしくはパケットが紛失してもパケットの順番が入れ替わっても問題のないアプリケーションで使用されることが多いです。
(例えば、音声や画像を送受信する通話や会議アプリなど)

WinSockを使用したサンプルコード

TCP

<Microsoft社提供>
TCPクライアント(Microsoftドキュメント)
TCPサーバ(Microsoftドキュメント)

<上記を少し修正>
TCPクライアント(簡易版)
TCPサーバ(簡易版)

UDP

作成中

その他テクニック

接続タイムアウト時間を指定する

作成中

送信タイムアウト時間を指定する

作成中

受信タイムアウト時間を指定する

作成中

おすすめの記事