异步Windows Socket包装,包括TCP与UDP,可处理粘包

 
头文件
struct IPAddress
{
	union {
		struct IPV4Address
		{
			ULONG host;
			USHORT port;
		}address;
		UINT64 _64;
	};

	static IPAddress Zero;

	ULONG& GetHost(){
 return address.host;}
	USHORT& GetPort(){
 return address.port;}
	ULONG GetHost()const{
 return address.host;}
	USHORT GetPort()const{
 return address.port;}
	string ToString()
	{
		in_addr addr;
		addr.S_un.S_addr = address.host;
		stringstream ss;
		ss << inet_ntoa(addr) << ":" << address.port;
		return ss.str();
	}

	IPAddress(ULONG _host = 0, USHORT _port = 0)
	{
		_64 = 0;
		address.host = _host;
		address.port = _port;
	}

	bool operator < (const IPAddress& _right) const
	{
		return _64 < _right._64;
	}

	bool operator != (const IPAddress& _right) const
	{
		return _64 != _right._64;
	}

	bool operator == (const IPAddress& _right) const
	{
		return _64 == _right._64;
	}
};

class Socket
{
public:

	Socket(int proto = SOCK_STREAM);
	Socket(SOCKET s);
	virtual ~Socket();

	u_long ReceiveLen();

	void Close();

protected:
	friend class SocketSelect;
	SOCKET s_;

	int* refCounter_;
	static int  nofSockets_;

	static void Start();
	static void End();
};

class TcpClient : public Socket
{
protected:
	friend class TcpServer;
	bool connected;

	TcpClient();
	TcpClient(SOCKET s);
public:
	int SendBytes(const std::string&);
	int Send(void* buf, int len);
	int Receive(char* buf, int len);
	bool IsConnected(){
 return connected;}
	string ReceiveBytes();
	TcpClient(const TcpClient&);
	TcpClient& operator=(TcpClient&);
	TcpClient(const std::string& host, int port);
	TcpClient(unsigned long host, int port);
};

class UdpSocket : public Socket
{
public:
	UdpSocket(unsigned long host, int port);
	int SendBytes(const std
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值