⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xsocket.h

📁 TRIMEDIA DSP 服务器上的程序
💻 H
字号:
#ifndef __XSOCKET_H__
#define __XSOCKET_H__
#include <winsock2.h>
#include <ws2tcpip.h>

// Output/Input(Network/File) Mode
#define SOCK_TYPE_NULL			0	//No Valid mode
#define	SOCK_TYPE_UNICAST_TCP_SERVER	1	//accept in local tcp socket, and then output
#define	SOCK_TYPE_UNICAST_TCP_CLIENT	2	//link and output to remote tcp client
#define SOCK_TYPE_UNICAST_UDP_SERVER	3	//output to remote udp socket
#define SOCK_TYPE_UNICAST_UDP_CLIENT	4	//input in local udp socket
#define SOCK_TYPE_FILEOUTPUT		5	//output to file
#define SOCK_TYPE_THIS_LINK		6	//sent by client to indicate use this link for video/audio

#define TTL_VALUE			255
#define MAX_LISTEN_QUEUE		5

class XSocket  
{
public:
	BOOL SetSendBuffer(int nLength);
	BOOL SetReceiveBuffer(int nLength);
	XSocket(void *pParent=NULL);
	virtual ~XSocket();

	void *m_pParent;
	
	SOCKET m_nSock;
	int m_nType;
	BOOL m_bMulticast;
    struct sockaddr_in m_UDPAddr; 
	fd_set m_readfds;
	struct timeval m_tv;

	BOOL CreateUDPServer(LPCSTR rip, int rport, LPCSTR lip, int lport);
	BOOL CreateUDPClient(LPCSTR rip, int rport, LPCSTR lip, int lport);
	BOOL CreateTCPServer(LPCSTR lip, int port);
	BOOL CreateTCPClient(LPCSTR rip, int rport);
	BOOL Close();
	XSocket* Accept();
	int Send(char *buf, int len);
	int Recv(char *buf, int len);
	int RecvBytes(char *buf, int len); // block until len bytes are received
	BOOL GetSockName(char *sockAddr, int *port);
	int CheckReadable(int timeout);
};

#endif
/*

 XSocket.DLL使用说明

用途:Windows下进行TCP/UDP/Multicast通信时使用的套接口类
环境:Windows95/98/2000/XP
依存:ws2_32.lib, 和wsock32.dll
使用方式:
	(1) 确保系统安装了wsock32.dll和ws2_32.lib
	(2) 在工程文件的Link选项中加入XSocket.lib, 将XSocket.h加入到使用XSocket的源文件中
	(3) 在程序开始使用XSocket之前(包括对象初始化),调用下列初始化代码:
		{
			WORD wVersionRequested;
			WSADATA wsaData;
			int ret;

			wVersionRequested=MAKEWORD(2,2);
			ret=WSAStartup(wVersionRequested,&wsaData);
			if(ret!=0){
				// ::MessageBox(NULL, "not useful sockets DLL", "Winsock2", MB_OK | MB_ICONWARNING);
				return FALSE;
			}
			if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=2){
				// ::MessageBox(NULL, "not support the requested version", "Winsock2", MB_OK | MB_ICONWARNING);
				WSACleanup();
				return FALSE;
			}
		}
		在程序结束使用XSocket之后(包括对象解析构),调用下列结束代码:
			WSACleanup();
	(4) 声明Xsocket变量或者指针,进行引用:
		TCP Server方式:
			XSocket	m_xsocket;

			//serverip是tcp服务器要绑定的本地地址,serverport是tcp服务器要绑定的端口
			//serverip为0.0.0.0时,选择缺省接口
			//返回TRUE,表示创建成功,否则失败
			m_xsockt.CreateTCPServer(serverip, serverport);
			
			//Accept()是阻塞操作,返回连接后的客户端
			//返回NULL表示有有效的客户端连接成功,否则失败
			pSocket = m_xsockt.Accept();

			//然后可以进行数据发送和接收
				// 发送数据,是阻塞操作 
				// 返回发送成功的字节数,如果不等于length,则发生错误
				pSocket->Send(pBuf, length);
				// 接收数据,是阻塞操作 
				// 返回接收成功的字节数,如果小于或等于0,则发生错误
				pSocket->Recv(pBuf, length);

			pSocket->close();
			delete pSocket; pSocket = NULL;
			m_xsocket.Close();

		TCP Client方式:
			XSocket	m_xsocket;
			
			//serverip是要连接的tcp服务器的地址,serverport是要连接的tcp服务器的端口
			//socket会根据路由信息自动选择接口进行连接。
			//是阻塞操作
			m_xsockt.CreateTCPClient(serverip, serverport);	
			//然后可以进行数据发送和接收
			m_xsocket.Send();	//说明同上
			m_xsocket.Recv();	//说明同上
			m_xsocket.Close();
			
		UDP 发送者方式:
			XSocket m_xsocket;
			
			//remoteip是对方的地址,remoteport是对方接收数据的端口
			//localip是UDP要从本地发送数据的接口地址,为0.0.0.0时选择缺省接口,localport是0
			//nType是S_WYJ_SEND(0x8008)
			m_xsockt.CreateUDP(remoteip, remoteport, localip, localport, nType);
			//然后可以进行数据发送和接收
			m_xsocket.Send();	//说明同上
			m_xsocket.Recv();	//说明同上
			m_xsocket.Close();

		UDP 接收者方式:
			XSocket m_xsocket;
			
			//remoteip是无效参数"0.0.0.0",remoteport是本地接收数据所绑定的端口
			//localip是UDP要从本地接收数据的接口地址,为"0.0.0.0"时选择缺省接口,localport是无效参数0
			//nType是S_WYJ_RECV(0x4004)
			m_xsockt.CreateUDP(remoteip, remoteport, localip, localport, nType);
			//然后可以进行数据发送和接收
			m_xsocket.Send();	//说明同上
			m_xsocket.Recv();	//说明同上
			m_xsocket.Close();
			
		UDP Multicast 发送者方式:
			XSocket m_xsocket;
			
			//remoteip是组播地址,remoteport是对方接收组播数据的端口
			//localip是Multicast要从本地发送数据的接口地址,localport是0
			//nType是S_WYJ_SEND(0x8008)
			m_xsockt.CreateUDP(remoteip, remoteport, localip, localport, nType);
			//然后可以进行数据发送和接收
			m_xsocket.Send();	//说明同上
			m_xsocket.Recv();	//说明同上
			m_xsocket.Close();
			
		UDP Multicast 接收者方式:
			XSocket m_xsocket;
		
			//remoteip是组播地址,remoteport是本地组播数据所绑定的端口
			//localip是Multicast要从本地接收数据的接口地址,为"0.0.0.0"时选择缺省接口,localport是无效参数0
			//nType是S_WYJ_RECV(0x4004)
			m_xsockt.CreateUDP(remoteip, remoteport, localip, localport, nType);
			//然后可以进行数据发送和接收
			m_xsocket.Send();	//说明同上
			m_xsocket.Recv();	//说明同上
			m_xsocket.Close();
			
		例子:
			a. 192.168.15.100是服务器,侦听端口是80
			   192.168.15.101是客户端,访问192.168.15.100的80服务
			
			   192.168.15.100上的程序是
					m_100xsocket.CreateTCPServer("192.168.15.100", 80);
					或者m_100xsocket.CreateTCPServer("0.0.0.0", 80);//本机只有一个IP接口时
			   192.168.15.101上的程序是
					m_x101socket.CreateTCPClient("192.168.15.100", 80);

			b. 192.168.0.100发送UDP数据给192.168.0.101的8080
				192.168.15.100上的程序是
					m_100xsocket.CreateUDP("192.168.15.101", 8080, "0.0.0.0", 0, S_WYJ_SEND);
				192.168.15.101上的程序是
					m_x101socket.CreateUDP("0.0.0.0", 8080, "192.168.15.101", 0, S_WYJ_RECV);
			
			c. 192.168.0.100发送组播数据225.1.1.1:1000, 192.168.0.101接收数据
				192.168.15.100上的程序是
					m_100xsocket.CreateUDP("225.1.1.1", 1000, "192.168.0.100", 0, S_WYJ_SEND);
				192.168.15.101上的程序是
					m_x101socket.CreateTCPClient("225.1.1.1", 8080, "192.168.15.101", 0, S_WYJ_RECV);

*/

				
				

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -