コードオープンソース(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;
}