// TcpPort.h: interface for the CTcpPort class.
//
//
#if !defined (AFX_TCPPORT_H__CED29CD4_1586_40DC_8AE6_15C05B74749E__INCLUDED_)
#define AFX_TCPPORT_H__CED29CD4_1586_40DC_8AE6_15C05B74749E__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "INetPort.h"
class CTcpPort : public INetPort
{
private:
SOCKET m_socket; //SOCKET句柄
SOCKADDR_IN m_TargetAddr; //目标地址和端口
CWsaEvent m_PurgeEvent; //用来控制异步读取线程中的Read操作返回
public:
CTcpPort ()
{
m_socket = INVALID_SOCKET;
memset(&m_TargetAddr, 0, sizeof(SOCKADDR_IN));
}
virtual ~CTcpPort ()
{
if (m_socket != INVALID_SOCKET)
{
closesocket(m_socket);
m_socket = INVALID_SOCKET;
}
TRACE(_T("Delete CTcpPort\n"));
}
virtual PORT_TYPE GetPortType()
{
return PORT_TYPE_TCP;
}
//配置对方地址和端口号
virtual BOOL SetConfig(const CString &sAddr, USHORT uPort);
//新建Socket
virtual BOOL Open();
//终止Read操作
virtual BOOL Purge();
//关闭连接
virtual BOOL Close();
//发送一个UDP包
virtual BOOL Write(PBYTE pOutBuffer, DWORD dwLength, DWORD dwTimeOut);
//读取一个UDP包
virtual BOOL Read(PBYTE pInBuffer, DWORD dwBufferLen, DWORD &rdwRealLen, DWORD dwTimeOut);
bool IsOpened() {return m_socket != INVALID_SOCKET;}
bool ShutDown() {return (::shutdown(m_socket, SD_BOTH)) != SOCKET_ERROR;}
};
#endif // !defined(AFX_TCPPORT_H__CED29CD4_1586_40DC_8AE6_15C05B74749E__INCLUDED_)