#include<Winsock2.h> //加载头文件
#include<stdio.h> //加载标准输入输出头文件
#pragma comment(lib,"ws2_32.lib")
void main()
{
WORD wVersionRequested;//
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1,1); //1.1版本的套接字
err = WSAStartup(wVersionRequested,&wsaData);
if(LOBYTE(wsaData.wVersion) = 1 || HIBYTE(wsaData.wVersion) = 1)
{
...WSACleanup();
...return;
}//如果不是1.1的则退出
SOCKET sockSrv = socket (AF_INET,SOCK_STREAM,0);//创建套接字
SOCKADDRIN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//转换Unsigned short为网络字节序的格式
addrSrv.sin_family = AF_INET;
addrSrv.sin_post = htons(6000);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//将套接字绑定到一个本地地址和端口上
listen(sockSrv,5);//将套接字设为监听模式,准备接收客户请求
SOCKADDR_IN addrClient;//定义地址族
int len = sizeof(SOCKADDR);//初始化这个参数,这个参数必须被初始化
while(1)
{
SOCKET sockConn = accept(sockSrv,(SOCKADR*)&addrClient,&len);//accept的第三个参数一定要有初始值.//等待客户请求到来当请求到来后,接受连接请求,返回一个亲的对应于此连接的套接字
//止时程序在此发生阻塞
char sendBuf[100];
sprintf(sendBuf,"Welcome%s to ",inet_ntoa(addrClient.sin_addr));//用返回的套接字和客户端进行通信
send (sockConn,sendBuf,strlen(sendBuf)+1,0);
char recvBuf[100];
recv(sockConn,recvBuf,100,0);
printf("%s/n",recvBuf);
cloasesocket(sockConn);//关闭套接字.等待另一个用户请求
}
}
客户端代码如下:
#include<Winsock2.h>
#include<stdio.h>
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1,1);
err = WSASTartup(wVersionRequested,&wsaData);//加载套接字库
if(err!=0)
{
return;
}
if(LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1 )
{
WSACleanup();
return;
}
SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0);//创建套接字
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(6000);
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));向服务器发出连接请求
char recvBuf[100];//和服务器端进行通信
recv(sockClient,recvBuf,100,0);
printf("%s/n",recvBuf);
send(sockClient,"This is lisi ",strlen("This is lisi ")+1,0);
closesocket(sockClient);//关闭套接字
WSACleanup();//心须调用这个函数清除参数