c言語でネットワークプログラミング
サーバー側
#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> int main(void) { int server_socket; struct sockaddr_in server_address; struct sockaddr_in client_address; int len; int socket0; //AF_INTF : 2ホスト間プロセス通信 SOCK_STREAM : 順次双方向バイトストリーム 0 : 自動設定 server_socket = socket(AF_INET, SOCK_STREAM, 0); server_address.sin_family = AF_INET; //ドメイン名 server_address.sin_port = htons(1234); //htons : ホストバイトオーダーをネットワークバイトオーダーに変換 server_address.sin_addr.s_addr = INADDR_ANY; //IPアドレス bind(server_socket, (struct sockaddr *) &server_address, sizeof(server_address)); listen(server_socket, 5); //5つまで接続要求をキューにエンキューできる len = sizeof(client_address); socket0 = accept(server_socket, (struct sockaddr *) &client_address, &len); write(socket0, "Yozora", 6); //ファイルアドレス : socket0 データの大きさ : 6 close(socket0); close(server_socket); return 0; }
クライアント側
#include <stdio.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> int main(void) { struct sockaddr_in server_address; int client_socket; char buf[32]; client_socket = socket(AF_INET, SOCK_STREAM, 0); server_address.sin_family = AF_INET; server_address.sin_port = htons(1234); server_address.sin_addr.s_addr = inet_addr("127.0.0.1");//32ビットIPアドレスに変換 connect(client_socket, (struct sockaddr *) &server_address, sizeof(server_address)); memset(buf, 0, sizeof(buf)); read(client_socket, buf, sizeof(buf)); printf("%s\n", buf); close(client_socket); return 0; }