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

📄 mysocket.h

📁 可以实现socket_t通信
💻 H
字号:

//#include <unistd.h>
//#include <sys/types.h>
//#include <arpa/inet.h>
//#include <netinet/in.h>
//#include <netdb.h>
//#include <sys/socket.h>
//#include <sys/time.h>

#include <winsock2.h> 
#include <stdlib.h>
#include <urlmon.h>
#include <time.h>
#include <typeinfo.h>

#ifndef _UNISTD_H
#define _UNISTD_H

#pragma comment(lib, "ws2_32.lib");

//#pragma comment(lib, "advapi32.lib");
//#pragma comment(lib, "user32.lib");
//#pragma comment(lib, "urlmon.lib");

int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData );
int WSACleanup(void); 

const unsigned MYSBUF_SIZE = 1024;
const unsigned MYSMAX_NAME_LEN = 256;
const unsigned MYSRX_BUF_SIZE = 4096;
const unsigned MYSTX_BUF_SIZE = 4096;
const unsigned MAXCONN = 5;
const unsigned MYSOCKET_DEFAULT_PORT = 1234;

enum MySocketError 
{
	MYSOCKET_NO_ERROR = 0,
	MYSOCKET_INVALID_ERROR,
	MYSOCKET_ACCEPT_ERROR,
	MYSOCKET_BIND_ERROR, 
	MYSOCKET_BUFOVER_ERROR, 
	MYSOCKET_CONNECT_ERROR, 
	MYSOCKET_FILESYSTEM_ERROR, 
	MYSOCKET_GETOPTION_ERROR, 
	MYSOCKET_HOSTNAME_ERROR, 
	MYSOCKET_INIT_ERROR, 
	MYSOCKET_LISTEN_ERROR, 
	MYSOCKET_PEERNAME_ERROR, 
	MYSOCKET_PROTOCOL_ERROR, 
	MYSOCKET_RECEIVE_ERROR, 
	MYSOCKET_REQUEST_TIMEOUT, 
	MYSOCKET_SERVICE_ERROR, 
	MYSOCKET_SETOPTION_ERROR, 
	MYSOCKET_SOCKNAME_ERROR, 
	MYSOCKET_SOCKETTYPE_ERROR, 
	MYSOCKET_TRANSMIT_ERROR,
};

class MySocket
{
	protected:
		sa_family_t address_family;
		int protocol_family;
		int socket_type;
		int port_number;
		int Mysocket;
		int conn_socket;
		MySocketError socket_error;

	protected:
		int bytes_read;
		int bytes_moved;
		int is_connected;
		int is_bound;

	public:
		sockaddr_in sin;
		sockaddr_in remote_sin;

	public:
		MySocket();
		MySocket(int st, int port, char *hostname=0);
		MySocket(sa_family_t af, int st, int pf, int port, char *hostname=0);
		virtual ~MySocket();

	public:
		void SetAddressFamily(sa_family_t af) { address_family = af; }
		void SetProtocolFamily(int pf) { protocol_family = pf; }
		int GetProtocolFamily() { return protocol_family; }
		void SetPortNumber(int p) { port_number = p; }
		int GetBoundSocket() { return Mysocket; }
		int GetSocket() { return Mysocket; }
		int GetRemoteSocket() { return conn_socket; }

	public:
		//socket function
		int Socket();
		int InitSocket(int st, int port, char *hostname = 0);
		int InitSocket(sa_family_t af, int st, int pf, int port, char *hostname = 0);
		void Close();
		void Close(int &s);
		void CloseSocket();
		void CloseRemoteSocket();
		int Bind();
		int Connect();
		int Accept();
		int Listen(int max_connections = MAXCONN);
		void ShutDown(int how = 0);
		void ShutDown(int &s, int how = 0);
		void ShutDownSocket(int how = 0);
		void ShutDownRemoteSocket(int how = 0);
		int GetSockOpt(int s, int level, int optName, void *optVal, unsigned *optLen);
		int GetSockOpt(int level, int optName, void *optVal, unsigned *optLen);
		int SetSockOpt(int s, int level, int optName, const void *optVal, unsigned optLen);
		int SetSockOpt(int level, int optName, const void *optVal, unsigned optLen);
		
		//stream function
		int Recv(void *buf, int bytes, int flags = 0);	//just for client
		int Recv(int s, void *buf, int bytes, int flags = 0);
		int Recv(void *buf, int bytes, int seconds, int useconds, int flags = 0);	//just for client
		int Recv(int s, void *buf, int bytes, int seconds, int useconds, int flags = 0);
		int Send(const void *buf, int bytes, int flags = 0); //just for client
		int Send(int s, const void *buf, int bytes, int flags = 0);
		int RemoteRecv(void *buf, int bytes, int seconds, int useconds, int flags = 0);
		int RemoteRecv(void *buf, int bytes, int flags = 0);
		int RemoteSend(const void *buf, int bytes, int flags = 0);
		void ResetRead() { bytes_read = 0; }
		void ResetWrite() { bytes_moved = 0; }

		//information database
		int GetPeerName(int s, sockaddr_in *sa);
		int GetPeerName();
		int GetSockName(int s, sockaddr_in *sa);
		int GetSockName();
		int GetServByName(char *name, char *protocol = 0);
		int GetServByPort(int port, char *protocol = 0);
		servent *GetServiceInformation(char *name, char *protocol = 0);
		servent *GetServiceInformation(int port, char *protocol = 0);
		int GetPortNumber();
		int GetRemotePortNumber();
		int GetHostName(char *sbuf);
		int GetIPAddress(char *sbuf);
		int GetDomainName(char *sbuf);
		int GetBoundIPAddress(char *sbuf);
		int GetRemoteHostName(char *sbuf);
		hostent *GetHostInformation(char *hostname);
		void GetClientInfo(char *client_name, int &r_port);
		sa_family_t GetAddressFamily();
		sa_family_t GetRemoteAddressFamily();

		//Process control function
		int ReadSelect(int s, int seconds, int useconds);
		int BytesRead() { return bytes_read; }
		int BytesMoved() { return bytes_moved; }
		int SetBytesRead(int bytes = 0) {return bytes_read = bytes;}
		int SetBytesMoved(int bytes = 0) {return bytes_moved = bytes;}
		int *GetBytesRead() {return &bytes_read;}
		int *GetBytesMoved() {return &bytes_moved;}
		int IsConnected() { return is_connected == 1;}
		int IsBound(){ return is_bound == 1;}
		int SetSocket(int s) {return Mysocket = s;}
		int SetRemoteSocket(int s) {return conn_socket = s;}
		void ReleaseSocket() { Mysocket = (int)-1;}
		void ReleaseRemoteSocket() { conn_socket = (int)-1;}

		//Datagram functions
		int RecvFrom(int s, sockaddr_in *sa, void *buf, int bytes, int seconds, int useconds, int flags = 0);
		int RecvFrom(int s, sockaddr_in *sa, void *buf, int bytes, int flags = 0);
		int SendTo(int s, sockaddr_in *sa, void *buf, int bytes, int flags = 0);
		int RecvFrom(void *buf, int bytes, int flags = 0);
		int RecvFrom(void *buf, int bytes, int seconds, int useconds, int flags = 0);
		int SendTo(void *buf, int bytes, int flags = 0);

		//Exception handling functions
		MySocketError GetSocketError() { return socket_error;}
		MySocketError GetSocketError() const { return socket_error;}
		MySocketError SetSocketError(MySocketError err) { return socket_error = err;}
		MySocketError ResetSocketError() { return socket_error = MYSOCKET_NO_ERROR;}
};

⌨️ 快捷键说明

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