[[Net004]]

* Windows版単純な server program [#ffdafcee]

 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <winsock2.h>
 #include <ws2tcpip.h>
 
 int main(int argc, char* argv[])
 {
 	struct sockaddr_in saddr;
 	struct sockaddr_in caddr;
 	socklen_t calen;
 
 	SOCKET sd;
 	SOCKET cd;
 	int port;
 	int err;
 
 	WORD wReqVersion;
 	WSADATA wsa;
 
 	/* Check the command-line arguments */
 	if(argc != 2)
 	{
 		fprintf(stderr, "Usage: %s port\n", argv[0]);
 		return (-1);
 	}
 	
 	port = atoi(argv[1]);
 	if(port <= 0)
 	{
 		fprintf(stderr, "Illegal port number (%d)\n", port);
 		return (-1);
 	}
 
 	/* Start the WinSock library */
 	wReqVersion = MAKEWORD(2,2);
 	if((err = WSAStartup(wReqVersion, &wsa)) != 0)
 		return err;
 	if((LOBYTE(wsa.wVersion) != 2) ||
 	   (HIBYTE(wsa.wVersion) != 2))
 	{
 		WSACleanup();
 		return (-1);
 	}
 
 	/* Set the server address */
 	memset(&saddr, 0, sizeof(saddr));
 	memset(&caddr, 0, sizeof(caddr));
 
 	saddr.sin_family = AF_INET;
 	saddr.sin_port = htons((u_short)port);
 	saddr.sin_addr.s_addr = INADDR_ANY;
 	
 	/* Create socket for listen port and bind the server address */
 	if((sd = socket( PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
 	{
 		err = WSAGetLastError();
 		WSACleanup();
 		return err;
 	}
 	if(bind(sd, (const struct sockaddr*)&saddr, sizeof(saddr)) == SOCKET_ERROR)
 	{
 		err = WSAGetLastError();
 		closesocket(sd);
 		WSACleanup();
 		return err;
 	}
 
 	/* Listen the service port */
 	if(listen(sd, 5) == SOCKET_ERROR)
 	{
 		err = WSAGetLastError();
 		closesocket(sd);
 		WSACleanup();
 		return err;
 	}
 
 	while(1)
 	{
 		/* Clear the address for accept */
 		memset(&caddr, 0, sizeof(caddr));
 		calen = sizeof(caddr);
 		/* Dequeue the requested connection in the listen socket */
 		if((cd = accept(sd,(struct sockaddr*)&caddr, &calen)) == SOCKET_ERROR)
 		{
 			err = WSAGetLastError();
 			closesocket(sd);
 			WSACleanup();
 			return err;
 		}
 		send(cd, "Hello\r\n", 7, 0);
 		closesocket(cd);
 	}
 
 	/* Server done. (Never come) */
 	closesocket(sd);
 	WSACleanup();
 	return 0;
 }



トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS