69,371
社区成员
发帖
与我相关
我的任务
分享
// MSocket.h: interface for the MSocket class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_MSOCKET_H__173986E0_9B3F_45BC_BD5E_D2510290E3FA__INCLUDED_)
#define AFX_MSOCKET_H__173986E0_9B3F_45BC_BD5E_D2510290E3FA__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <windows.h>
#include <iostream.h>
#include <winsock.h>
#define NO_FLAGS_SET 0
///////////////////////////////////////////////
//MSocket is as a TCP client
//it connect to host to send and recv data
///////////////////////////////////////////////
class MSocket
{
public:
int recvData(char *mdata, int msize);
bool disconnectFromHost();
bool sendData(char *mdata, int msize);
bool connectToHost();
MSocket(char *destip, u_short destport);
virtual ~MSocket();
private:
char m_DestIp[32];
u_short m_DestPort;
WSADATA Data;
SOCKADDR_IN destSockAddr;
SOCKET destSocket;
unsigned long destAddr;
int status;
int numsnt;
};
#endif // !defined(AFX_MSOCKET_H__173986E0_9B3F_45BC_BD5E_D2510290E3FA__INCLUDED_)
// MSocket.cpp: implementation of the MSocket class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "MSocket.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
MSocket::MSocket(char *destip, u_short destport)
{
strcpy(m_DestIp, destip);
m_DestPort = destport;
/* initialize the Windows Socket DLL */
status=WSAStartup(MAKEWORD(1, 1), &Data);
if (status != 0)
cerr << "ERROR: WSAStartup unsuccessful"
<< endl;
/* convert IP address into in_addr form */
destAddr=inet_addr(m_DestIp);
/* copy destAddr into sockaddr_in structure */
memcpy(&destSockAddr.sin_addr,
&destAddr, sizeof(destAddr));
/* specify the port portion of the address */
destSockAddr.sin_port=htons(m_DestPort);
/* specify the address family as Internet */
destSockAddr.sin_family=AF_INET;
}
MSocket::~MSocket()
{
}
bool MSocket::connectToHost()
{
/*掉线后要重新获取SOCKET,才能重连上,一次连接一个SOCKET*/
/* create a socket */
destSocket=socket(AF_INET, SOCK_STREAM, 0);
if (destSocket == INVALID_SOCKET)
{
cerr << "ERROR: socket unsuccessful" << endl;
status=WSACleanup();
if (status == SOCKET_ERROR)
cerr << "ERROR: WSACleanup unsuccessful"
<< endl;
return false;
}
cout<<"MSocket initialized sucessfully!"<<endl;
cout << "Trying to connect to IP Address: "
<< m_DestIp << endl;
/* connect to the server */
status=connect(destSocket, (LPSOCKADDR) &destSockAddr, sizeof(destSockAddr));
if (status == SOCKET_ERROR)
{
cerr << "ERROR: connect unsuccessful" << endl;
status=closesocket(destSocket);
if (status == SOCKET_ERROR)
cerr << "ERROR: closesocket unsuccessful"
<< endl;
return false ;
}
cout << "Connected..." << endl;
return true;
}
bool MSocket::sendData(char *mdata, int msize)
{
cout << "Sending..." << endl;
numsnt=send(destSocket, mdata, msize, NO_FLAGS_SET);
if (numsnt != msize)
{
cout << "Connection terminated" << endl;
status=closesocket(destSocket);
if (status == SOCKET_ERROR)
cerr << "ERROR: closesocket unsuccessful"
<< endl;
return false;
}
return true;
}
bool MSocket::disconnectFromHost()
{
status=closesocket(destSocket);
if (status == SOCKET_ERROR) {
cerr << "ERROR: closesocket unsuccessful"
<< endl;
}
status=WSACleanup();
if (status == SOCKET_ERROR) {
cerr << "ERROR: WSACleanup unsuccessful"
<< endl;
return false;
}
return true;
}
int MSocket::recvData(char *mdata, int msize)
{
status = recv(destSocket, mdata, msize, NO_FLAGS_SET);
if (status == SOCKET_ERROR) {
cerr << "ERROR: recv() unsuccessful" << endl;
}
return status;
}