コードオープンソース(4):WindowsにおけるCSの簡単な実現


次の2つのコードはWindowsの中で、TCP/IPの創立過程を紹介して、ただ1つの最も簡単な実現です.VS 2008でテストに合格しました.
サーバ側:
#include<winsock.h>
#include<stdio.h>
#pragma comment(lib,"wsock32.lib")
int main()
{
	// 
	WORD wVersionRequested;  //Window Socket 
	WSADATA wsaData;
	int err;
	wVersionRequested = MAKEWORD( 1, 1 ); // , 1.1 
	err = WSAStartup( wVersionRequested, &wsaData );
	if ( err != 0 )	{ return 1; }    // 

	if(LOBYTE( wsaData.wVersion)!= 1 ||
        HIBYTE(wsaData.wVersion) != 1) 
	{
		WSACleanup();
		return 1; 
	}
	// socket
	SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0); // 
    SOCKADDR_IN addrSrv;
	addrSrv.sin_family=AF_INET;
	addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);// 
	addrSrv.sin_port=htons(5001);
    // bind
	if(bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)) < 0)
	{
		printf("bind failed
"); return 1; } // listen listen(sockSrv, 5); SOCKADDR_IN addrClient; while(true) { int len=sizeof(SOCKADDR); char sendBuf[100]; char recvBuf[100]; // sockConn SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len); sprintf(sendBuf,"Welcome %s to seu",inet_ntoa(addrClient.sin_addr)); send(sockConn, sendBuf, strlen(sendBuf) + 1, 0); recv(sockConn, recvBuf, 100, 0); printf("%s
", recvBuf); closesocket(sockConn); } return 0; }

クライアント:
#include<winsock.h>
#include<stdio.h>
#pragma comment(lib,"wsock32.lib")
int main()
{
	// 
	WORD wVersionRequested;  //Window Socket 
	WSADATA wsaData;
	int err;

	wVersionRequested = MAKEWORD( 1, 1 );   // , 1.1 
	err = WSAStartup( wVersionRequested, &wsaData );
	if ( err != 0 )	{ return 1; }           // 

	if(LOBYTE( wsaData.wVersion)!= 1 ||
        HIBYTE(wsaData.wVersion) != 1) 
	{
		WSACleanup(); 
		return 1; 
	}

	char ip[] = "127.0.0.1";
	int port = 5001;

	SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0);         // 
    SOCKADDR_IN addrSrv;
	addrSrv.sin_family = AF_INET;                              // 
	addrSrv.sin_addr.S_un.S_addr = inet_addr(ip);              // IP 
	addrSrv.sin_port = htons(port);                            // 

	if(connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)) < 0)
	{
		printf("connect failed
"); return 1; } char recvBuf[100]; recv(sockClient,recvBuf,100,0); // printf("%s
",recvBuf); // send(sockClient, "hello seu!", strlen("hello seu!") + 1, 0); // Sleep(5000); closesocket(sockClient); // WSACleanup(); return 0; }