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

📄 tcpdtc.c

📁 基于UNIX的中间件编程,只能运行于UNIX操作系统
💻 C
字号:
/************************************************************	tcpdts.cpp:the tcp and udp global functions****						zhoushijie****								2000/3**********************************************************/#include "tcpdtc.h"u_short portbase=0;/*------------------------------------------------------------------* connectTCP---conncet to a specified tcp service on a special host*-------------------------------------------------------------------*/SOCKET conncetTCP(const char *host,const char *service){		return connectsock(host,service,"tcp");}/*--------------------------------------------------------* connectUDP---conncet to a specified UDP service on a special host*-----------------------------------------------------------------*/SOCKET connectUDP(const char *host,const char *service){		return connectsock(host,service,"udp");}/*-----------------------------------------------------------* connect sock---allocate * connect a sock using TCP Or UDP*------------------------------------------------------------*/SOCKET connectsock(const char *host,const char *service,const  char *transport){	struct hostent *phe;	struct servent *pse;	struct protoent *ppe;	struct sockaddr_in sin;	int s,type;	memset(&sin,0,sizeof(sin));	sin.sin_family=AF_INET;	/*map serice name to port */	if(pse=getservbyname(service,transport))		sin.sin_port=htons(ntohs((u_short)pse->s_port )+portbase);	else if  ((sin.sin_port=htons((u_short)atoi(service)))==0)			errexit("can't get \"%s\" service entry\n",service);/* map host name to IP address,allowing for dotted decimal*/	if (phe=gethostbyname(host))		memcpy(&sin.sin_addr,phe->h_addr,phe->h_length);	else if ((sin.sin_addr.s_addr=inet_addr(host))==INADDR_NONE)		errexit("can't get\"%s\" host entry\n",host);/*map protocol name to protocol number*/if ((ppe=getprotobyname(transport))==0)	errexit("can't get \" %s \" protocol entry\n",transport);/*use protocl name to chose a socket type*/if(strcmp(transport,"udp")==0)	type=SOCK_DGRAM;else 	type=SOCK_STREAM;/*allocate a socket*/s=socket(PF_INET,type,ppe->p_proto);if (s==INVALID_SOCKET)	errexit("can't create socket : %d\n",GetLastError());/*connect the socket*/if(strcmp(transport,"tcp")==0)	if (connect(s,(struct sockaddr *)&sin,sizeof(sin)),0)		errexit("can't connect ot %s.%s: %d\n",host ,service,GetLastError());return s;}/*---------------------------------------------* errexit ---print an error message and exit*----------------------------------------------*/void errexit(const char *format,...){	va_list args;	va_start(args,format);	vfprintf(stderr,format,args);	va_end(args);	exit(1);}SOCKET passiveTCP(const char *host,const char *service,int qlen){		return passivesock(host,service,"tcp",qlen);}SOCKET passiveUDP(const char *host,const char *service){	return passivesock(host,service,"udp",0);}SOCKET passivesock(const char *host,const char *service,const char *transport,int qlen){	struct servent *pse;	struct protoent  *ppe;	struct hostent *phe;	struct sockaddr_in sin;	SOCKET s;	int  type;	memset(&sin,0,sizeof(sin));	sin.sin_family=AF_INET;	/*map service name to protocol number*/		if (pse=getservbyname(service,transport))		sin.sin_port=htons(ntohs((u_short)pse->s_port )+portbase);	else if ((sin.sin_port=htons((u_short)atoi(service)))==0)		errexit("can't get  \"%s\" service entry\n",service);	 /*map host name to IP address,allowing for dotted decimal*/	if (phe=gethostbyname(host))		memcpy(&sin.sin_addr,phe->h_addr,phe->h_length);	else if ((sin.sin_addr.s_addr=inet_addr(host))==INADDR_NONE)		errexit("can't get\"%s\" host entry\n",host);		/* map protocol name to protocol number */	if((ppe=getprotobyname(transport))==0)		errexit ("cannot get  %s protocol ernty\n",transport);/* use protocol to chose a socket type*/if(strcmp(transport,"udp")==0)	type=SOCK_DGRAM;else 	type=SOCK_STREAM;/*allocat a socket */s=socket(PF_INET ,type,ppe->p_proto );if(s==INVALID_SOCKET)	errexit("can't allocate a socket:%d",GetLastError());/* bind a socket */if (bind(s,(struct sockaddr *)&sin,sizeof(sin))<0)	errexit("can't bind to %S port:%d\n",service,GetLastError());if(type==SOCK_STREAM && listen(s,qlen)==SOCKET_ERROR)	errexit("can't listen to %s port with error:%d\n",service ,GetLastError());return s;}

⌨️ 快捷键说明

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