📄 passive_server.c
字号:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <winsock.h>
u_short portbase = 0 ;
SOCKET sockserver(const char *service,const char *transport,int qlen);
/*-------------------------------------------------------------------
* udppassive
*-------------------------------------------------------------------
*/
SOCKET
UDPserver(const char *service)
{
return sockserver(service,"udp",0);
}
/*-------------------------------------------------------------------
* tcppassive
*-------------------------------------------------------------------
*/
SOCKET
TCPserver(const char *service,int qlen)
{
return sockserver(service,"tcp",qlen);
}
/*-------------------------------------------------------------------
*
*-------------------------------------------------------------------
*/
SOCKET
sockserver(const char *service,const char *transport,int qlen)
{
struct servent *pse; /* server information */
struct protoent *ppe; /* proto information */
struct sockaddr_in sin; /* endpoint IP address */
int s,type; /* socket description */
memset(&sin,0,sizeof(sin));
sin.sin_family=AF_INET;
sin.sin_addr.s_addr = INADDR_ANY;
/* get portnumber from service name */
if(pse=getservbyname(service,transport) )
sin.sin_port=htons(ntohs((u_short)pse->s_port));
else if( (sin.sin_port=htons((u_short)atoi(service)))==0)
{
printf(" get portnumber error \n");
WSACleanup();
exit(1);
}
/* get protocol number from protocol name */
if((ppe=getprotobyname(transport))==0)
{
printf(" get protocol number error \n");
WSACleanup();
exit(1);
}
/* choose socket type */
if(strcmp(transport,"udp")==0)
type=SOCK_DGRAM;
else
type=SOCK_STREAM;
s=socket(PF_INET,type,ppe->p_proto);
if( s==INVALID_SOCKET)
{
printf(" creat socket error \n");
WSACleanup();
exit(1);
}
if(bind(s,(struct sockaddr *)&sin,sizeof(sin))==SOCKET_ERROR )
{
printf(" socket bind error \n");
WSACleanup();
exit(1);
}
if(type==SOCK_STREAM && listen(s,qlen)==SOCKET_ERROR)
{
printf(" socket listen error \n");
WSACleanup();
exit(1);
}
return s;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -