今日の世界では、コンピュータ ネットワークがデータ転送分野で重要な役割を果たしています。これは各プログラマが知っておくべき主題です。コンピューター ネットワークの下では、ソケット プログラミングはプログラミングの世界で最も重要なトピックの 1 つです。このトピックでは、ソケット プログラミングと、C++ で実装されるソケット プログラミングのさまざまな方法について説明します。
C++ におけるソケット プログラミングは、ネットワーク上で 2 つ以上のノードを相互に結合し、ノードがデータを失うことなくデータを共有できるようにする方法です。これに関連して、1 つのノードは特定の IP アドレスに接続されている 1 つのポートをリッスンします。クライアントがサーバーに到達すると、サーバーはソケット リスナーを作成します。
ソケットとは何ですか?
リアルタイムの例でソケットについて理解しましょう。ソケットは、2 つのデバイス間の接続を提供する媒体の一種です。ソケットは、ソケットと電話の間、または電話とラップトップの間の接続を提供する電話充電器のいずれかになります。ソケットを使用すると、さまざまなアプリケーションがさまざまなポートでローカル ネットワークに接続されます。ソケットが作成されるたびに、サーバーはプログラムを指定し、そのプログラムがソケットとドメイン アドレスを指定します。
ソケットは、異なるプロセス間でデータを交換するために使用されるメカニズムの一種です。ここで、これらのプロセスは、ネットワークを介して接続された異なるデバイスまたは同じデバイスに存在します。ソケットの接続が作成されると、データは両方向に送信され、いずれかのエンドポイントが接続を閉じるまで送信され続けます。
クライアントサーバー通信の手順
クライアントとサーバー間の通信を確立するには、いくつかの手順に従わなければなりません。これらは次のとおりです。
サーバーソケット作成の段階
サーバー用のソケットを作成するにはいくつかの段階があります。これらは次のとおりです。
コネクションとは何ですか?
接続は、2 つのソフトウェアが互いについて認識されている 2 つのマシン間の関係の一種です。これら 2 つのソフトウェアは、相互に接続を確立する方法を知っています。言い換えれば、この 2 つのソフトウェアはネットワーク上でビットを送信する方法を知っていると言えます。ソケットの接続は、2 台のマシンが電話番号、IP アドレス、TCP ポートなど、相互間のすべての情報を認識している必要があることを意味します。
ソケットは、プログラムが受信接続を受け入れ、受信接続を送受信できるようにするファイルに似たオブジェクトのタイプです。また、サーバーのプロセスに割り当てられるリソースの一種でもあります。
サーバーは、socket() を使用してソケットを作成できます。このソケットは他のプロセッサと共有できません。
クライアントの段階
- データを相互に通信できるソケット。
- ストレージ バッファには、addr_of_data や addr_of_buffer などのアドレスに関するデータを保存できます。
- len_of_data や len_of_buffer などのバッファのサイズを扱います。
- データの送信方法を示すフラグを扱います。
ソケットで接続を確立する手順
さまざまなクライアントとサーバー間の接続を確立します。ただし、クライアントとサーバーの両方がソケット接続を処理できます。各プロセスは、独自のソケットへの接続を確立する必要があります。
クライアント側でソケットを確立する手順は次のとおりです。
- これは、socket() システムコールを使用してソケットを作成します。
- 次に、system() 呼び出しを使用してサーバーのソケット アドレスに接続する必要があります。
- 次に、データを送受信する必要があります。これはさまざまな方法で行うことができます。この read() 関数と write() 関数を実行できます。
サーバー側でソケットを確立する手順は次のとおりです。
- まず、socket() システムコールを使用してソケットを作成します。
- 次に、bind() システムコールを使用してソケットをアドレスにバインドします。アドレスは、ホスト マシンのサーバー ソケットのポート番号で構成されます。
- 次に、listening () システム コールを使用して接続をリッスンします。
- 次に、サーバーは accept() システムコールを使用して受信接続を受け入れます。また、クライアントがサーバーに接続されるまで、受信コマンドはすべてブロックされます。
- その後、データの送受信のプロセスが開始されます。
マルチスレッドを使用しない複数のクライアントの接続
単一のユーザーがサーバーにどのように接続できるかを示すさまざまな例があります。今日のプログラミングの世界では、複数のユーザーが異なるソケットを使用してサーバーに接続しています。
これを実現するにはさまざまな方法があります。その 1 つはマルチスレッドです。マルチスレッドの助けを借りて、これを実現できます。 select() 関数の助けを借りてマルチスレッド プロセスを実装できます。
例:
クライアントのコード:
// Client side C/C++ program to demonstrate Socket // programming #include #include #include #include #include #define PORT 8080 int main(int argc, char const* argv[]) { int sock = 0, valread, client_fd; struct sockaddr_in serv_addr; char* hello = 'Hello from client'; char buffer[1024] = { 0 }; if ((sock = socket(AF_INET, SOCK_STREAM, 0)) <0) 0 8080 { printf(' socket creation error '); return -1; } serv_addr.sin_family="AF_INET;" serv_addr.sin_port="htons(PORT);" convert ipv4 and ipv6 addresses from text to binary form if (inet_pton(af_inet, '127.0.0.1', &serv_addr.sin_addr) <="0)" printf( ' invalid address not supported ((client_fd="connect(sock," (struct sockaddr*)&serv_addr, sizeof(serv_addr))) 0) printf(' connection failed send(sock, hello, strlen(hello), 0); printf('hello message sent '); valread="read(sock," buffer, 1024); printf('%s ', buffer); closing the connected close(client_fd); 0; code for server: server side c c++ program demonstrate programming #include #define port int main(int argc, char const* argv[]) server_fd, new_socket, valread; struct sockaddr_in address; opt="1;" addrlen="sizeof(address);" buffer[1024]="{" }; char* hello="Hello from server" ; creating file descriptor ((server_fd="socket(AF_INET," sock_stream, 0)) perror('socket failed'); exit(exit_failure); forcefully attaching (setsockopt(server_fd, sol_socket, so_reuseaddr | so_reuseport, &opt, sizeof(opt))) perror('setsockopt'); address.sin_family="AF_INET;" address.sin_addr.s_addr="INADDR_ANY;" address.sin_port="htons(PORT);" (bind(server_fd, sockaddr*)&address, sizeof(address)) perror('bind (listen(server_fd, 3) perror('listen'); ((new_socket="accept(server_fd," (socklen_t*)&addrlen)) perror('accept'); send(new_socket, close(new_socket); listening shutdown(server_fd, shut_rdwr); pre> <p> <strong>Compiling:</strong> </p> <img src="//techcodeview.com/img/c-tutorial/33/socket-programming-c-c-2.webp" alt="Socket Programming in C/C++"> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/c-tutorial/33/socket-programming-c-c-3.webp" alt="Socket Programming in C/C++"> <h2>Uses of Socket Programming</h2> <p>Socket programs are used to communicate between various processes, usually running on different systems. It is mostly used to create a client-server environment. This post provides the various functions used to create the server and client program and an example program.</p> <p>In the example, the client program sends a file name to the server, and the server sends the contents of the file back to the client. Socket programming usually pertains to basic communication protocols like TCP/UDP and raw sockets like ICMP. These protocols have a small communication overhead when compared to underlying protocols such as HTTP/DHCP/SMTP etc.</p> <p> <strong>Some of the basic data communications between the client and server are:</strong> </p> <ul> <li>File Transfer: Sends name and gets a file.</li> <li>Web Page: Sends URL and gets a page.</li> <li>Echo: Sends a message and gets it back.</li> </ul> <h2>Disadvantages</h2> <ul> <li>C++ can establish communication only with the machine requested and not with any other machine on the network.</li> <li>Sockets allow only raw data to be sent. This means that the client and server need mechanisms to interpret the data.</li> </ul> <hr></0)>