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

📄 connect_client.c

📁 一个基于windows api 的源程序...有很强的参考价值
💻 C
字号:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <winsock.h>

#ifndef INADDR_NONE
#define INADDR_NONE 0xffffffff
#endif

SOCKET   sockconnect(const char *host,const char *service,const char *transport);

/*-------------------------------------------------------------------------
 *connectUDP
 *-------------------------------------------------------------------------
 */
SOCKET 
UDPconnect(const char *host,const char *service)
{
  return  sockconnect(host,service,"udp");   
}

/*-------------------------------------------------------------------------
 *connectTCP
 *-------------------------------------------------------------------------
 */
SOCKET 
TCPconnect(const char *host,const char *service)
{
  return  sockconnect(host,service,"tcp");   
}

/*-------------------------------------------------------------------------
 *
 *-------------------------------------------------------------------------
 */
 SOCKET  
 sockconnect(const char *host,const char *service,const char *transport)
 {
 	struct hostent *phe;      /*host information     */
 	struct servent *pse;      /* server information  */ 
 	struct protoent *ppe;     /*protocol information */
 	struct sockaddr_in sin;   /*endpoint IP address  */
 	int s, type;              /* socket description  */

 	memset(&sin,0,sizeof(sin));
 	sin.sin_family=AF_INET;
 	
 	/**** get port number from  service  ****/
 	if( pse=getservbyname(service,transport) )
 	      sin.sin_port=pse->s_port;                             /*  port */  
 	else if( (sin.sin_port=htons( (u_short)atoi(service)))==0)
 	{
 	   printf("get server information error \n");
 	   WSACleanup();
 	   exit(1);
        }
        
        /**** get IP address from  host name ****/ 
 	if(phe=gethostbyname(host)) 
  	      memcpy(&sin.sin_addr,phe->h_addr,phe->h_length);         /*  host IP address  */
	 else if( (sin.sin_addr.s_addr=inet_addr(host))==INADDR_NONE )
  	{
 	   printf("get host IP information error \n");
 	   WSACleanup();
 	   exit(1);
        }
        
        /**** get protocol number  from protocol name  ****/
 	if( (ppe=getprotobyname(transport))==0)
 	{
 	   printf("get protocol information error \n");
 	   WSACleanup();
 	   exit(1);
        }
 
       
 	if(strcmp(transport,"udp")==0)
    	  type=SOCK_DGRAM;
 	else
    	 type=SOCK_STREAM;    


        /**** creat a socket description ****/ 
	s=socket(PF_INET,type,ppe->p_proto);
	
 	if( s==INVALID_SOCKET)
 	{
 	   printf(" creat socket error \n");
 	   WSACleanup();
 	   exit(1);
        }
 
 	if(  connect(s,(struct sockaddr *)&sin,sizeof(sin))==SOCKET_ERROR  )
  	{
 	   printf("connect socket  error \n");
 	   WSACleanup();
 	   exit(1);
        }

 	return s;
 
 
 }
 

⌨️ 快捷键说明

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