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

📄 socket3.h

📁 winsail v2.0是用于DOS下的图形界面空间系统
💻 H
📖 第 1 页 / 共 2 页
字号:
//TCP包定义
typedef struct tagTCP_HEADER {
    WORD			wSrcPort;		//源端口
    WORD			wDesPort;		//目的端口
    DWORD			dwSeqNO;		//序列号,指明当前段在全部信息中的位置序号
	DWORD			dwAckNO;        //确认号,指明将要到达的下一个段的序列号
    WORD			wUU1:4;
    WORD			wTHL:4;
    WORD			wFIN:1;
    WORD			wSYN:1;
    WORD			wRST:1;
    WORD			wPSH:1;
    WORD			wACK:1;
    WORD			wURG:1;
    WORD			wUU2:2;
    /*
    unsigned        wTHL  : 4;		//数据偏移
	unsigned        wUU1  : 6;		//保留1
    unsigned        wURG : 1;		//URG紧急标志。指明紧急指针有效
    unsigned        wACK : 1;		//ACK确认标志
    unsigned        wPSH  : 1;		//PSH压栈标志
    unsigned        wRST  : 1;		//RST重置标志
    unsigned        wSYN  : 1;		//SYN同步标志
    unsigned        wFIN  : 1;		//FIN结束标志
    */
    unshort			wWin;			//窗口,表接收机能够接收的数据块数
    unshort			wChecksum;      //校验码
    unshort			wUrgPoint;      //紧急指针
	//unsigned long option:24;		//选项
	//unsigned long fill:8;			//填充
	//byte			data[];			//数据

}TCP_HEADER;

//伪UDP头
typedef struct tagUDPx_HEADER
{
	IP_ADDRESS mIPSendAddr;
	IP_ADDRESS mIPRecvAddr;
    BYTE       byReserve;
    BYTE       byProtoent;
    WORD       wLength;

}UDPx_HEADER;
//UDP包定义
typedef struct tagUDP_HEADER 
{
	unsigned		wSrcPort;	//源端口
	unsigned		wDesPort;	//目的端口
	unsigned		wLength;		//UDP包长度
	unsigned		wChecksum;	//UDP校验值
}UDP_HEADER;

//定义协议家族
#define AF_UNSPEC       0        //没有指定
#define AF_UNIX         1        //local to host (pipes, portals)
#define AF_INET         2        //internetwork: UDP, TCP, etc.
#define AF_IMPLINK      3        //arpanet imp addresses
#define AF_PUP          4        //pup protocols: e.g. BSP
#define AF_CHAOS        5        //mit CHAOS protocols
#define AF_IPX          6        //IPX and SPX
#define AF_NS           6        //XEROX NS protocols
#define AF_ISO          7        //ISO protocols
#define AF_OSI          AF_ISO   //OSI is ISO
#define AF_ECMA         8        //european computer manufacturers
#define AF_DATAKIT      9        //datakit protocols
#define AF_CCITT        10       //CCITT protocols, X.25 etc
#define AF_SNA          11       //IBM SNA
#define AF_DECnet       12       //DECnet
#define AF_DLI          13       //Direct data link interface
#define AF_LAT          14       //LAT
#define AF_HYLINK       15       //NSC Hyperchannel
#define AF_APPLETALK    16       //AppleTalk
#define AF_NETBIOS      17       //NetBios-style addresses
#define AF_VOICEVIEW    18       //VoiceView
#define AF_FIREFOX      19       //FireFox
#define AF_UNKNOWN1     20       //Somebody is using this!
#define AF_BAN          21       //Banyan
#define AF_MAX          22

//定义套接字类型
#define SOCK_STREAM     1 //流套接字
#define SOCK_DGRAM      2 //数据报套接字
#define SOCK_RAW        3 //原始协议套接字
#define SOCK_RDM        4 //reliably-delivered message
#define SOCK_SEQPACKET  5 //sequenced packet stream



struct  hostent
{
        char    FAR * h_name;           /* official name of host */
        char    FAR * FAR * h_aliases;  /* alias list */
        short   h_addrtype;             /* host address type */
        short   h_length;               /* length of address */
        char    FAR * FAR * h_addr_list; /* list of addresses */
#define h_addr  h_addr_list[0]          /* address, for backward compat */
};
typedef struct hostent HOSTENT;
typedef struct hostent *PHOSTENT;
typedef struct hostent FAR *LPHOSTENT;

struct  servent
{
        char    FAR * s_name;           /* official service name */
        char    FAR * FAR * s_aliases;  /* alias list */
        short   s_port;                 /* port # */
        char    FAR * s_proto;          /* protocol to use */
};
typedef struct servent SERVENT;
typedef struct servent *PSERVENT;
typedef struct servent FAR *LPSERVENT;

struct  protoent
{
        char    FAR * p_name;           //official protocol name
        char    FAR * FAR * p_aliases;  //alias list
        short   p_proto;                //protocol #
};
typedef struct protoent PROTOENT;
typedef struct protoent *PPROTOENT;
typedef struct protoent FAR *LPPROTOENT;

struct  linger {
        u_short l_onoff;	//option on/off
        u_short l_linger;	//linger time
};
typedef struct linger LINGER;
typedef struct linger *PLINGER;
typedef struct linger FAR *LPLINGER;





#define IOCPARM_MASK    0x7f            /* parameters must be < 128 bytes */
#define IOC_VOID        0x20000000      /* no parameters */
#define IOC_OUT         0x40000000      /* copy out parameters */
#define IOC_IN          0x80000000      /* copy in parameters */
#define IOC_INOUT       (IOC_IN|IOC_OUT)                                      
#define _IO(x,y)        (IOC_VOID|((x)<<8)|(y))
#define _IOR(x,y,t)     (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
#define _IOW(x,y,t)     (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))

#define FIONREAD    _IOR('f', 127, u_long) /* get # bytes to read */
#define FIONBIO     _IOW('f', 126, u_long) /* set/clear non-blocking i/o */
#define FIOASYNC    _IOW('f', 125, u_long) /* set/clear async i/o */

/* Socket I/O Controls */
#define SIOCSHIWAT  _IOW('s',  0, u_long)  /* set high watermark */
#define SIOCGHIWAT  _IOR('s',  1, u_long)  /* get high watermark */
#define SIOCSLOWAT  _IOW('s',  2, u_long)  /* set low watermark */
#define SIOCGLOWAT  _IOR('s',  3, u_long)  /* get low watermark */
#define SIOCATMARK  _IOR('s',  7, u_long)  /* at oob mark? */




//TCP连接表
typedef struct tagTCPCACHE
{
	WORD wState;
	IP_ADDRESS mIPLocalAddr;
	WORD wLocalPort;
	IP_ADDRESS mIPRemoteAddr;
	WORD wRemotePort;
}TCPCACHE;

//UDP连接表
typedef struct tagUDPCACHE
{
	WORD wState;
	IP_ADDRESS mIPLocalAddr;
	WORD wLocalPort;
	IP_ADDRESS mIPRemoteAddr;
	WORD wRemotePort;
}UDPCACHE;



struct sockaddr 
{
    unsigned short sa_family;
    char           sa_data[14];
};

struct in_addr 
{
	union 
	{
		struct 
		{ 
			u_char s_b1;
			u_char s_b2;
			u_char s_b3;
			u_char s_b4; 
		} S_un_b;
		struct 
		{ 
			u_short s_w1;
			u_short s_w2; 
		} S_un_w;
		u_long S_addr;
	} S_un;
};

struct sockaddr_in
{
	short            sin_family;
	unsigned short   sin_port;
	struct   in_addr sin_addr;
	char             sin_zero[8];
};


struct PACKETPARAM 
{
	unsigned char	major_rev;	/* Revision of Packet Driver spec */
	unsigned char	minor_rev;	/*  this driver conforms to. */
	unsigned char	length;		/* Length of structure in bytes */
	unsigned char	addr_len;	/* Length of a MAC-layer address */
	unsigned short	mtu;		/* MTU, including MAC headers */
	unsigned short	multicast_aval;	/* Buffer size for multicast addr */
	unsigned short	rcv_bufs;	/* (# of back-to-back MTU rcvs) - 1 */
	unsigned short	xmt_bufs;	/* (# of successive xmits) - 1 */
	unsigned short	int_num;	/* Interrupt # to hook for post-EOI
					   processing, 0 == none */
};

struct PACKETSTATISTICS
{
    unsigned long	packets_in;	/* Totals across all handles */
	unsigned long	packets_out;
	unsigned long	bytes_in;	/* Including MAC headers */
	unsigned long	bytes_out;
	unsigned long	errors_in;	/* Totals across all error types */
	unsigned long	errors_out;
	unsigned long	packets_lost;	/* No buffer from receiver(), card */
					/*  out of resources, etc. */
};

WORD	GetEthernetChecksum(WORD* pBuffer, int nSize, BOOL bDisplay = FALSE);

void far PacketReceived();




//==========================================================
//==========================================================
//==========================================================
int Initial_PktDrv();
int Driver_Info(int hPacket, WORD* wVersion, WORD* wClass,
				  WORD* wType, WORD* wNumber,
				  WORD* wFunctionality, char* pName, int nLen);
int Access_Type(WORD wClass, WORD wType, WORD wNumber,
			   char* pName, int nLen, void far (*receive)(),
                           HANDLE* hPacket);
int Release_Type(int nHandle);
int Send_Packet(BYTE* pBuffer, int nLength);
int Terminate_Device(int hPacket);
int Terminate_Device(int hPacket);
int Get_Address(int hPacket, BYTE* pBuffer, int nLength);
int Reset_Interface(int nPacket);
int Get_Parameters(PACKETPARAM* pPacketParam);
int As_Send_Packet1(BYTE* pBuffer, int nLen, int (far *upcall)());
int AsynchronousSendPacket2();
int DropPacketFromYueve();
int Set_Receive_Mode(int hPacket, int nMode);
int Get_Rev_Mode(int hPacket, int* pnMode);
int Set_Multicase_List(char* pAddrList, int nLength);
int Get_Multicase_List(char* pAddrList, int* pnLength);
int Get_Statistic(PACKETSTATISTICS* pStatistics);
int Set_Address(char* pAddr, int nLength);
int Send_Raw_Bytes();
int FlushRawBytesReceived();
int FetchRawBytesReceived();
int PktGeterr();




BOOL AfxGetLocalNICAddress(ETHERNET_ADDRESS mEthernetAddress);
int  InitPacketInterface(int* phIp_Packet, int* phArp_Packet, void* pEthernetAddr);


BOOL GlobalInitSocket();
BOOL GlobalCloseSocket();
BOOL EthernetEntry(BOOL bSingle, BOOL bSend, BOOL bIcmp);
void WaitPacketReceiveFinish();
void GetNetcardPacketAttrib(DWORD* pdwC1, DWORD* pdwC2, DWORD* pdwC3);


long GetEthereFifoLocation(int nType, int nLoc);

BYTE* AfxGetIpSelfAddr();
BYTE* AfxGetIpPeerAddr();
BYTE* AfxGetIpMaskAddr();

BOOL WSAGetLastError();
void CleanupNetcardPage(BOOL bRecv);



//基本函数========================================
//建立套接字,指定五元中的“协议”
SOCKET socket(int af,int type,int protocol);
//绑定套接定,指定五元中的“本地主机地址和端口号”
int bind(SOCKET s, const struct sockaddr FAR * name, int namelen);
//侦听套接字,通知TCP协议,服务器准备好接收连接,并指明请求连接队列的长度
int listen(SOCKET s,int backlog);
//等待来自客户端的连接,用在服务器端
SOCKET accept(SOCKET s, struct sockaddr FAR * addr, int FAR * addrlen);
//向服务器发出连接请求,用在客户端
int connect(SOCKET s, const struct sockaddr FAR * name, int namelen);
//接收数据-TCP
int recv(SOCKET s,char FAR * buf,int len,int flags);
//发送数据-TCP
int send(SOCKET s,const char FAR * buf,int len,int flags);
//接收数据-UDP
int recvfrom(SOCKET s,char FAR * buf,int len,int flags,struct sockaddr FAR * from,int FAR * fromlen);
//发送数据-UDP
int sendto(SOCKET s,const char FAR * buf,int len,int flags,const struct sockaddr FAR * to,int tolen);
//关闭套接字
int closesocket(SOCKET s);
//关闭套接字
int shutdown( SOCKET s,int how);

//转换函数========================================
//长整型主机字节转网络字节
u_long htonl(u_long hostlong);
//长整型网络字节转主机字节 
u_long ntohl(u_long netlong);
//短整型主机字节转网络字节
u_short htons(u_short hostshort);
//短整型网络字节转主机字节
u_short ntohs( u_short netshort);
//internet地址转网络字符串串地址
char FAR *inet_ntoa(struct in_addr in );
//网络字符串地址转internet地址
unsigned long inet_addr(const char FAR * cp);
//将NIC地址转成字符串
char FAR *iphy_fromnic(ETHERNET_ADDRESS in);



//检测套接字的状态
int select(int nfds,fd_set FAR * readfds, fd_set FAR * writefds, 
	fd_set FAR *exceptfds,const struct timeval FAR * timeout);
//为套接字提供控制(1)设置阻塞模式(2)可读的数据量(3)检测带外数据是否读完
int ioctlsocket(SOCKET s,long cmd,u_long FAR * argp);
//查询网络包的状态
BOOL QueryNetcardPage(SOCKET hSocket, BOOL bRecv = TRUE, 
	DWORD dwMilliTime = 0, DWORD* pdwCount = NULL);



//设置套接字相关选项属性
int setsockopt(SOCKET s,int level,int optname,const char FAR * optval,int optlen);
//检索套接字的相关选项属性
int getsockopt(SOCKET s,int level,int optname,char FAR * optval,int FAR * optlen);
//获得与指定套接字自己的“名字”
int getsockname(SOCKET s, struct sockaddr FAR * name,int FAR * namelen);
//获得与指定套接字连接对方的“名字”
int getpeername(SOCKET s,struct sockaddr FAR * name,int FAR * namelen);




//通过intenet地址获得主机信息
struct hostent  FAR *gethostbyaddr(const char FAR * addr, int len, int type);
//通过主机名字获得主机信息
struct hostent  FAR *gethostbyname(const char FAR * name);
//获取本地址主机的名字
int gethostname(char FAR * name,int namelen);
//通过协议名称获得协议信息
struct protoent FAR *getprotobyname(const char FAR * name);
//通过协议号获得协议信息
struct protoent FAR *getprotobynumber(int number);
//通过服务名称和协议名称获取协议信息
struct servent  FAR *getservbyname(const char FAR * name,const char FAR * proto);
//通过服务名称和协议名称获取协议信息
struct servent  FAR *getservbyport(int port,const char FAR * proto);


void far TFTP_Dialog();

BOOL TFTP_SendFile (SOCKET hSocket,const struct sockaddr_in FAR * to,
	const char* pLocalFileName, const char* pRemoteFileName);

BOOL TFTP_ReadFile (SOCKET hSocket,const struct sockaddr_in FAR * to,
	const char* pLocalFileName, const char* pRemoteFileName);


#include <Socket4.h>
#endif

⌨️ 快捷键说明

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