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;
}