4,356
社区成员
发帖
与我相关
我的任务
分享
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
BOOL InitSocket()
{
WSADATA wsaData;
WORD wVersionRequested;
int err=0;
wVersionRequested=MAKEWORD(2,2);
err=WSAStartup(wVersionRequested,&wsaData);
if(err!=0)
{
cout<<"Could not find a usage WinSock DLL"<<GetLastError()<<endl;
return false;
}
if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=2)
{
cout<<"Could not find a usage WinSock DLL"<<GetLastError()<<endl;
WSACleanup();
return false;
}
return true;
}
int _tmain(int argc, _TCHAR* argv[])
{
if(!InitSocket())
return -1;
SOCKET ListenSock;
SOCKET AcceptSock;
SOCKADDR_IN InterAddr;
ListenSock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
InterAddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
InterAddr.sin_family=AF_INET;
InterAddr.sin_port=htons(8000);
if(ListenSock==INVALID_SOCKET)
{
cout<<"A error ocured while build a socket"<<GetLastError()<<endl;
closesocket(ListenSock);
WSACleanup();
return -1;
}
if(bind(ListenSock,(sockaddr *)&InterAddr,sizeof(sockaddr))==SOCKET_ERROR)
{
cout<<"A error ocured while binding a socket"<<GetLastError()<<endl;
closesocket(ListenSock);
WSACleanup();
return -1;
}
if(listen(ListenSock,5)==SOCKET_ERROR)
{
cout<<"A error ocured while listening on a socket"<<GetLastError()<<endl;
closesocket(ListenSock);
WSACleanup();
return -1;
}
char sendbuf[512]={'\0'};
char recvbuf[512]={'\0'};
fd_set fd_read,fd_write;
FD_ZERO(&fd_read);
FD_ZERO(&fd_write);
TIMEVAL timeout;
timeout.tv_sec=13;
timeout.tv_usec=0;
int ret=0;
int bytes_recv;
AcceptSock=accept(ListenSock,NULL,NULL);
if(AcceptSock==INVALID_SOCKET)
{
cout<<"A error ocured while accept connect request from client"<<GetLastError()<<endl;
closesocket(ListenSock);
closesocket(AcceptSock);
WSACleanup();
return -1;
}
while(true)
{
FD_SET(AcceptSock,&fd_read);
FD_SET(AcceptSock,&fd_write);
ret=select(NULL,&fd_read,&fd_write,NULL,&timeout);
if(ret==SOCKET_ERROR)
continue;
if(ret>0)
{
if(FD_ISSET(AcceptSock,&fd_read))
{
if((bytes_recv=recv(AcceptSock,recvbuf,sizeof(recvbuf),NULL))==SOCKET_ERROR)
{
cout<<"A error ocured while receive data from client"<<GetLastError()<<endl;
closesocket(AcceptSock);
closesocket(ListenSock);
WSACleanup();
return -1;
}
else
cout<<recvbuf<<endl;
}
else
{
if(FD_ISSET(AcceptSock,&fd_write))
{
gets(sendbuf);
if(send(AcceptSock,sendbuf,sizeof(sendbuf),NULL)==SOCKET_ERROR)
{
cout<<"A error ocured while send data to client"<<GetLastError()<<endl;
closesocket(AcceptSock);
closesocket(ListenSock);
WSACleanup();
return -1;
}
}
}
}
}
return 0;
}