C言語でTCP通信を実現する方法
C言語では、ソケットライブラリを利用してTCP通信が可能です。以下に、C言語でTCP通信を実現するための簡単なサンプルを示します。
ソケットの作成: まず、通信を行うためのソケットを作成する必要があります。`socket()`関数を使用してソケットを作成し、プロトコル族をAF_INET(IPv4)とし、ソケットタイプをSOCK_STREAM(ストリームソケット、つまりTCPソケット)として指定します。
#include
#include
#include
#include
#include
int main() {
int sockfd;
// 创建套接字
sockfd = socket(AF_INET, SOCK_STREAM, 0);
// 检查套接字是否创建成功
if (sockfd == -1) {
perror("Failed to create socket");
exit(EXIT_FAILURE);
}
// 其他操作...
return 0;
}
サーバーアドレスの設定: サーバー側では、サーバーのアドレスとポート番号の設定が必要です。アドレスは `struct sockaddr_in` を使って表すことができ、`inet_pton()` 関数を使って IP アドレスをネットワークバイトオーダーに変換します。
#include // 服务器地址 struct sockaddr_in server_addr; const char* server_ip = "127.0.0.1"; int server_port = 12345; memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(server_port); inet_pton(AF_INET, server_ip, &(server_addr.sin_addr));
クライアント側では、`connect()` 関数を使ってサーバーとの接続を確立します。
if (connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) {
perror("Failed to connect");
exit(EXIT_FAILURE);
}
4. データの送受信: 接続が確立されると、`send()` と `recv()` 関数を使ってデータの送受信ができます。ただし、TCP はストリーム型のプロトコルであるため、通常、データの送受信の前に、メッセージの境界を区別するための独自のプロトコルを定義する必要があります。
char buffer[1024];
const char* message = "Hello, server!";
// 发送数据
if (send(sockfd, message, strlen(message), 0) == -1) {
perror("Failed to send data");
exit(EXIT_FAILURE);
}
// 接收数据
int bytes_received = recv(sockfd, buffer, sizeof(buffer), 0);
if (bytes_received == -1) {
perror("Failed to receive data");
exit(EXIT_FAILURE);
}
buffer[bytes_received] = '\0';
printf("Received: %s\n", buffer);
5. ソケットを閉じる:通信が終わったら、`close` 関数を使用してソケットを閉じます。
close(sockfd);
これは簡単な例で、実際にはより複雑な処理や操作を、具体的使用に合わせて行うことができます。 なお実運用においては、例えばエラー処理やタイムアウトなどの考慮も必要となります。