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

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

2011-10-27 09:00 309 查看
下面两段代码介绍Windows中,TCP/IP的建立过程,只是一个最简单的实现。VS2008中测试通过。

服务器端:

view
plainprint?

#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;

}

客户端:

view
plainprint?

#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;

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