15,473
社区成员




#include <afx.h>
#include <Winsock2.h>
#pragma comment(lib, "WS2_32")
void StartEnv();
void SendData(CString SendBuf);
bool SocketClose=false;
CString SendDataBuf;
SOCKET sockClient;
void OpenSocket(CString SerAddress,short SerPort)
{
socketstart:
StartEnv(); //建立初始环境
SendDataBuf.Empty();
sockClient=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr(SerAddress);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(SerPort);
if(INVALID_SOCKET == connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)))
{
closesocket(sockClient);
WSACleanup();
Sleep(1000);
if(false==SocketClose)
goto socketstart;
}
while (1)
{
if(SendDataBuf.GetLength()>5)
if(0 > send(sockClient,SendDataBuf,strlen(SendDataBuf)+1,0))
send(sockClient,SendDataBuf,strlen(SendDataBuf)+1,0);
if(10054==WSAGetLastError())
{
closesocket(sockClient);
WSACleanup();
Sleep(1000);
if(false==SocketClose)
goto socketstart;
}
SendDataBuf.Empty();
Sleep(1000);
}
closesocket(sockClient);
WSACleanup();
Sleep(1000);
if(false==SocketClose)
goto socketstart; //异常断开时,重新连接
}
void SendData(CString SendBuf)
{
if(SendBuf.GetLength()>0)
SendDataBuf=SendBuf;
SendBuf.Empty();
}
void CloseSocket()
{
SocketClose=true; //正常关闭socket
closesocket(sockClient);
WSACleanup();
exit(-1);
}
void StartEnv()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
exit(-1);
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
exit(-1);
}
}