?? wsocket.cpp
字號:
// WSocket.cpp: implementation of the CWSocket class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Test.h"
#include "WSocket.h"
#include <math.h>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CWSocket::CWSocket()
{
}
CWSocket::~CWSocket()
{
}
int CWSocket::Connect(char* IP_ADDR,int PORT)
{
WSADATA Data;
SOCKADDR_IN destSockAddr;
unsigned long destAddr;
int status;
//initialize the Windows Socket DLL
status=WSAStartup(MAKEWORD(1, 1), &Data);
if (status != 0)
AfxMessageBox("ERROR: WSAStartup unsuccessful.");
destAddr=inet_addr(IP_ADDR);
memcpy(&destSockAddr.sin_addr, &destAddr,sizeof(destAddr));
destSockAddr.sin_port=htons(PORT);
destSockAddr.sin_family=AF_INET;
m_destSocket=socket(AF_INET, SOCK_STREAM, 0);
if (m_destSocket == INVALID_SOCKET)
{
AfxMessageBox("ERROR: socket unsuccessful.");
status=WSACleanup();
if (status == SOCKET_ERROR)
AfxMessageBox("ERROR: WSACleanup unsuccessful." );
return(1);
}
status=connect(m_destSocket, (LPSOCKADDR) &destSockAddr, sizeof(destSockAddr));
if (status == SOCKET_ERROR)
{
AfxMessageBox("ERROR: connect unsuccessful.");
Close();
return(1);
}
return 0;
}
// Send the message to the server
int CWSocket::Send(char* sendText,int bufLen)
{
int nSecs=SECENDVAL;
FD_SET fd = {1, m_destSocket};
TIMEVAL tv = {nSecs, 0};
if(select(0, NULL, &fd, NULL, &tv) == 0)
return(1);
m_cSocket.Lock();
int numsnd,nLeft,nIdx;
nLeft = bufLen;
nIdx = 0;
while (nLeft>0)
{
numsnd=send(m_destSocket, &sendText[nIdx], nLeft, NO_FLAGS_SET);
if (numsnd == 0 || numsnd == SOCKET_ERROR)
{
Close();
return(1);
}
else
{
nLeft -= numsnd;
nIdx += numsnd;
}
}
m_cSocket.Unlock();
return numsnd;
}
// Wait for a response from server
int CWSocket::Receive(char* recvText,int bufLen)
{
int nSecs=SECENDVAL;
FD_SET fd = {1, m_destSocket};
TIMEVAL tv = {nSecs, 0};
if(select(0, &fd, NULL, NULL, &tv) == 0)
return(1);
m_cSocket.Lock();
int numrcv,nLeft,nIdx;
numrcv=recv(m_destSocket, recvText,bufLen, NO_FLAGS_SET);
if ((numrcv == 0) || (numrcv == SOCKET_ERROR))
{
Close();
return 1;
}
if (numrcv<4)
{
m_cSocket.Unlock();
return 1;
}
nLeft=0;
nLeft = *(int*)recvText;
nLeft -= numrcv;
nIdx = numrcv;
while (nLeft>0 && nLeft < MAXBUFLEN)
{
numrcv=recv(m_destSocket, &recvText[nIdx],nLeft, NO_FLAGS_SET);
if ((numrcv == 0) || (numrcv == SOCKET_ERROR))
{
Close();
return 1;
}
nLeft -= numrcv;
nIdx += numrcv;
}
m_cSocket.Unlock();
return 0;
}
void CWSocket::Close()
{
int status;
status=closesocket(m_destSocket);
//if (status == SOCKET_ERROR)
// AfxMessageBox("ERROR: closesocket unsuccessful.");
status=WSACleanup();
//if (status == SOCKET_ERROR)
// AfxMessageBox("ERROR: WSACleanup unsuccessful.");
// m_cSocket.Unlock();
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -