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

📄 passive_server.c

📁 一个基于windows api 的源程序...有很强的参考价值
💻 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 + -