// 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) { 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( 12345 ); 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クライアントからの接続要求を待てる状態にする // 接続数は5 ret = listen( sock, 5 ); 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; }