您的位置:首页 > 编程语言

代码开源(4)——Windows 中CS简单实现

2011-08-12 21:28 197 查看
下面两段代码介绍Windows中,TCP/IP的建立过程,只是一个最简单的实现。VS2008中测试通过。

服务器端:

#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\n");
		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\n", 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\n");
		return 1;
	}

	char recvBuf[100];
	recv(sockClient,recvBuf,100,0);  //接受数据
	printf("%s\n",recvBuf);          //打印收到的数据
	send(sockClient, "hello seu!", strlen("hello seu!") + 1, 0); //发送数据
	Sleep(5000);
	closesocket(sockClient);         //关闭套接字

    WSACleanup();
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: