📄 tcpdtc.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 + -