// winsock2TestServer.cpp : メイン プロジェクト ファイルです。 #include "stdafx.h" #include "winsock2.h" #include using namespace std; using namespace System; #pragma comment( lib, "ws2_32.lib" ) int main(array ^args) { wchar_t port_number[10]; DWORD val = GetPrivateProfileString( L"TCPIP" , L"Port_Number" , L"NULL" , &port_number[0] , sizeof( port_number ) , L"./winsock2TestServer.ini" ); wprintf( L"%s\n", port_number ); wchar_t listen_number[10]; GetPrivateProfileString( L"TCPIP" , L"Listen_Number" , L"NULL" , &listen_number[0] , sizeof( listen_number ) , L"./winsock2TestServer.ini" ); wprintf( L"%s\n", listen_number ); WSADATA wsaData; int ret; SOCKET sock; int len; SOCKET client_sock; struct sockaddr_in addr; struct sockaddr_in client; // winsock2の初期化 ret = WSAStartup( MAKEWORD( 2, 0 ), &wsaData ); if ( ret != 0 ) { switch( ret ) { case WSASYSNOTREADY: printf( "WSASYSNOTREADY\n" ); break; case WSAVERNOTSUPPORTED: printf( "WSAVERNOTSUPPORTED\n" ); break; case WSAEINPROGRESS: printf( "WSAEINPROGRESS\n" ); break; case WSAEPROCLIM: printf( "WSAEPROCLIM\n" ); break; case WSAEFAULT: printf( "WSAEFAULT\n" ); break; default: break; } exit( -1 ); } printf( "WSAStartup successful.\n" ); // ソケットの作成 sock = socket( AF_INET, SOCK_STREAM, 0 ); if ( sock == INVALID_SOCKET ) { printf( "error : %d\n", WSAGetLastError() ); exit( -2 ); } printf( "socket successful.\n" ); // ソケットの設定 addr.sin_family = AF_INET; addr.sin_port = htons( _wtoi( port_number ) ); addr.sin_addr.S_un.S_addr = INADDR_ANY; ret = bind( sock , ( struct sockaddr* )&addr , sizeof( addr ) ); if ( ret == SOCKET_ERROR ) { printf( "error : %d\n", WSAGetLastError() ); exit( -3 ); } printf( "bind successful.\n" ); // TCPクライアントからの接続要求を待てる状態にする ret = listen( sock, _wtoi( listen_number ) ); if ( ret == SOCKET_ERROR ) { printf( "error : %d\n", WSAGetLastError() ); exit( -4 ); } printf( "listen successful.\n" ); // TCPクライアントからの接続要求を受け付ける len = sizeof( client ); client_sock = accept( sock , ( struct sockaddr* )&client , &len ); printf( "accepted connection from %s (%d)\n" , inet_ntoa( client.sin_addr ) , ntohs( client.sin_port ) ); // メッセージ送信 char* msg = "HELLO winsock2!!"; send( client_sock, msg, strlen( msg ), 0 ); // TCPセッションの終了 closesocket( client_sock ); // winsock2の終了処理 WSACleanup(); printf( "WSACleanup successful.\n" ); return 0; }