#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib,"WS2_32")
int 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 sListen=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sListen==INVALID_SOCKET)
{
printf("Failed socket()\n");
return ;
}
//填充sockaddr_in结构
sockaddr_in sin;
sin.sin_port=htons(2000);
sin.sin_addr.S_un.S_addr=INADDR_ANY;
sin.sin_family=AF_INET;
if(bind(sListen,(LPSOCKADDR)&sin,sizeof(sin))==SOCKET_ERROR)
{
printf("Failed bind() \n");
return ;
}
//进入监听模式
if(listen(sListen,2)==SOCKET_ERROR)
{
printf("Failed listen() \n ");
return ;
}
//连接请求
sockaddr_in remoteAddr;
int nAddrlen=sizeof(remoteAddr);
SOCKET sClient;
printf("waiting....");
sClient=accept(sListen,(SOCKADDR*)&remoteAddr,&nAddrlen);
if(sClient==INVALID_SOCKET)
{
printf("failed accept()");
return;
}
printf("\n接受到一个连接:%s\r\n",inet_ntoa(remoteAddr.sin_addr));
while(1)
{
//向客户端发送数据
char recvBuf[100];
char sendBuf[100];
char tempBuf[200];
recv(sClient,recvBuf,100,0);
if('q'==recvBuf[0])
{
send(sClient,"q",strlen("q"),0);
printf("Chat End! \n");
break;
}
sprintf(tempBuf,"%s says: %s",remoteAddr.sin_addr,recvBuf);
printf("%s\n,recvBuf");
printf("please in put :");
gets(sendBuf);
send(sClient,sendBuf,100,0);
}
closesocket(sClient);
closesocket(sListen);
WSACleanup();
}
评论0