📄 yes.cpp
字号:
#include "stdafx.h"
#include "yes.h"
bool InitSocket()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return false;
}
return true;
}
void UnInitSocket()
{
WSACleanup();
}
SOCKET MakeServeSocket(short port,u_int msgid,HWND hwnd)
{
SOCKET sock=socket(AF_INET,SOCK_STREAM,0);
if(sock==INVALID_SOCKET) return NULL;
sockaddr_in addr;
addr.sin_family=AF_INET;
addr.sin_port=htons(port);
addr.sin_addr.s_addr=htonl(INADDR_ANY);
int ret=bind(sock,(const sockaddr*)&addr,sizeof(SOCKADDR));
if(ret==SOCKET_ERROR)
{
closesocket(sock);
return NULL;
}
int iErrorCode=WSAAsyncSelect(sock,hwnd, msgid, FD_ACCEPT);
ret=listen(sock,5);
if(ret==SOCKET_ERROR)
{
closesocket(sock);
return NULL;
}
return sock;
}
SOCKET MakeServeSocket(short port)
{
SOCKET sock=socket(AF_INET,SOCK_STREAM,0);
if(sock==INVALID_SOCKET) return NULL;
sockaddr_in addr;
addr.sin_family=AF_INET;
addr.sin_port=htons(port);
addr.sin_addr.s_addr=htonl(INADDR_ANY);
int ret=bind(sock,(const sockaddr*)&addr,sizeof(SOCKADDR));
if(ret==SOCKET_ERROR)
{
closesocket(sock);
return NULL;
}
ret=listen(sock,5);
if(ret==SOCKET_ERROR)
{
closesocket(sock);
return NULL;
}
return sock;
}
SOCKET AcceptSocket(SOCKET sock,sockaddr FAR * addr)
{
int nLengthAddr = sizeof(SOCKADDR);
SOCKET m_hSocket = accept(sock, addr, &nLengthAddr);
return m_hSocket;
}
SOCKET ConnectSocket(char* host,short port)
{
SOCKET client=socket(AF_INET,SOCK_STREAM,0);
if(client==INVALID_SOCKET) return NULL;
sockaddr_in addr;
addr.sin_family=AF_INET;
addr.sin_addr.s_addr=inet_addr(host);
addr.sin_port=htons(port);
int ret=connect(client,(const sockaddr*)&addr,sizeof(SOCKADDR));
if(ret==SOCKET_ERROR)
{
closesocket(client);
return NULL;
}
return client;
}
int SendSocket (SOCKET s, const char FAR * buf, int len, int nSecs)
{
CString key;
key.Format("send%u",s);
HANDLE evt=CreateEvent(NULL,FALSE,TRUE,key);
WaitForSingleObject(evt,INFINITE);
int index=0;
int count=0;
while(index<len)
{
if(nSecs>0)
{
FD_SET fd = {1, s};
TIMEVAL tv = {nSecs, 0};
if(select(0, NULL, &fd, NULL, &tv) !=1)
{
SetEvent(evt);
CloseHandle(evt);
return SOCKET_ERROR;
}
}
count=send(s,buf+index,len-index,0);
if(count<=0)
{
int ret=WSAGetLastError();
SetEvent(evt);
CloseHandle(evt);
return SOCKET_ERROR;
}
else
{
index+=count;
}
}
SetEvent(evt);
CloseHandle(evt);
return index;
}
int RecieveSocket(SOCKET client,int length,char* buffer,int nSecs,char* terchar)
{
CString key;
key.Format("recv%u",client);
HANDLE evt=CreateEvent(NULL,FALSE,TRUE,key);
WaitForSingleObject(evt,INFINITE);
int index=0;
int count=0;
while(index<length)
{
if(nSecs>0)
{
FD_SET fd = {1, client};
TIMEVAL tv = {nSecs, 0};
if(select(0, &fd, NULL, NULL, &tv) !=1)
{
SetEvent(evt);
CloseHandle(evt);
return SOCKET_ERROR;
}
}
count=recv(client,buffer+index,length-index,0);
if(count<=0)
{
int ret=WSAGetLastError();
SetEvent(evt);
CloseHandle(evt);
return SOCKET_ERROR;
}
else
{
index+=count;
if(terchar)
{
if(strncmp(buffer+index-strlen(terchar),terchar,strlen(terchar))==0)
{
SetEvent(evt);
CloseHandle(evt);
return index;
}
}
}
}
SetEvent(evt);
CloseHandle(evt);
return index;
}
void CloseSocket(SOCKET sock)
{
CString keyrecv;
keyrecv.Format("recv%u",sock);
HANDLE evtrecv=CreateEvent(NULL,FALSE,TRUE,keyrecv);
CString keysend;
keysend.Format("send%u",sock);
HANDLE evtsend=CreateEvent(NULL,FALSE,TRUE,keysend);
WaitForSingleObject(evtrecv,INFINITE);
WaitForSingleObject(evtsend,INFINITE);
closesocket(sock);
SetEvent(evtsend);
CloseHandle(evtsend);
SetEvent(evtrecv);
CloseHandle(evtrecv);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -