www.pudn.com > comm11111.rar > socket.c


#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
 
#define sockOpenFail	-12001 
#define sockBindFail	-12002 
#define sockGetSockName	-12003 
#define sockSendFail	-12004 
#define sockRecvFail	-12005 
#define sockUnknowHost 	-12006 
#define sockConnectFail	-12007 
#define sockAcceptFail	-12008 
#define sockUnknowServ 	-12009 
#define sockgetnameFail	-12010 
#define sockgetpeerFail	-12011 
#define sockListenError	-12012 
 
int SockClientOpen(char *pszHost,char *sinPort); 
int sockClientOpen(char *pszHost,int sinPort); 
int SockServerOpen(char *sinPort,int Listenum); 
int sockServerOpen(int sinPort,  int Listenum); 
int sockClose(int sHandle); 
int sockSend(int sHandle,char *pszBuf,int iLen); 
int sockRecv(int sHandle,char *pszBuf,int iMaxLen); 
int sockListen(int sHandle); 
int sockLook(int sHandle); 
 
extern int errno; 
extern char **environ; 
 
/*static int Listensock;*/ 
 
int SockClientOpen( char *pszHost, char *sinPort ) 
{ 
   int sHandle; 
   u_long hl; 
   struct sockaddr_in server; 
   struct hostent *hp,*gethostbyname(); 
   struct servent *sp,*getservbyname(); 
    
 
   if( ( sHandle = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ) ) < 0 )  
   { 
	  ShowMsg("clinetopen:socket : %d,%s\n",errno,strerror(errno)); 
      return sockOpenFail; 
   } 
 
   memset((char *)&server,0,sizeof(struct sockaddr_in)); 
   server.sin_family=AF_INET; 
 
   /*server.sin_port = htons(sinPort);*/ 
   if( ( sp = getservbyname(sinPort,"tcp"))==NULL ) 
   { 
  	 ShowMsg("getservbyname : %d,%s\n",errno,strerror(errno)); 
         return sockUnknowServ; 
   } 
   server.sin_port =sp->s_port; 
 
   /*hl=inet_addr(pszHost);  
     memcpy( (char *)&server.sin_addr, (char *)&hl, 4 ); */ 
   if( ( hp = gethostbyname( pszHost ) ) == NULL )  
   { 
  	 ShowMsg("gethostbyname : %d,%s\n",errno,strerror(errno)); 
         return sockUnknowHost; 
   } 
   memcpy( (char *)&server.sin_addr, (char *)hp->h_addr, hp->h_length ); 
 
 
   if( connect( sHandle, (struct sockaddr *)&server, sizeof(server) ) < 0 )  
   { 
	  ShowMsg("connect : %d,%s\n",errno,strerror(errno)); 
      close(sHandle); 
      return sockConnectFail; 
   } 
   return( sHandle ); 
} 
 
int sockClientOpen( char *pszHost, int sinPort ) 
{ 
   int sHandle; 
   u_long hl; 
   struct sockaddr_in server; 
   struct hostent *hp,*gethostbyname(); 
   struct servent *sp,*getservbyname(); 
    
 
   if( ( sHandle = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ) ) < 0 )  
   { 
	  ShowMsg("clinetopen:socket : %d,%s\n",errno,strerror(errno)); 
      return sockOpenFail; 
   } 
 
   memset((char *)&server,0,sizeof(struct sockaddr_in)); 
   server.sin_family=AF_INET; 
 
   server.sin_port = htons(sinPort); 
   /*if( ( sp = getservbyname(sinPort,"tcp"))==NULL ) 
   { 
  	 ShowMsg("getservbyname : %d,%s\n",errno,strerror(errno)); 
         return sockUnknowServ; 
   } 
   server.sin_port =sp->s_port;*/ 
 
   hl=inet_addr(pszHost);  
   memcpy( (char *)&server.sin_addr, (char *)&hl, 4 ); 
   /*if( ( hp = gethostbyname( pszHost ) ) == NULL )  
   { 
  	 ShowMsg("gethostbyname : %d,%s\n",errno,strerror(errno)); 
         return sockUnknowHost; 
   } 
   memcpy( (char *)&server.sin_addr, (char *)hp->h_addr, hp->h_length ); 
   */ 
 
 
   if( connect( sHandle, (struct sockaddr *)&server, sizeof(server) ) < 0 )  
   { 
	  ShowMsg("connect : %d,%s\n",errno,strerror(errno)); 
      close(sHandle); 
      return sockConnectFail; 
   } 
   return( sHandle ); 
} 
 
int SockServerOpen( char *sinPort,int Listenum) 
{ 
   int sHandle; 
   int iLen; 
   /*int LISTEN;*/ 
   struct sockaddr_in server; 
   struct servent *sp,*getservbyname(); 
 
   /*LISTEN=atoi(getenv("LISTEN"));*/ 
   /*if (LISTEN ==0) LISTEN=20;*/ 
   /*if (LISTEN <= 0) 
   { 
	  ShowMsg("env :LISTEN  not found or error\n"); 
      return sockListenError; 
   }*/ 
 
 
   if( ( sHandle = socket( AF_INET, SOCK_STREAM, 0 ) ) < 0 )  
   { 
	  ShowMsg("sockcomm : %d,%s\n",errno,strerror(errno)); 
      return sockOpenFail; 
   } 
 
   memset((char *)&server, 0, sizeof(struct sockaddr_in)); 
   server.sin_family = AF_INET; 
   server.sin_addr.s_addr = INADDR_ANY; 
  /* server.sin_port = htons(sinPort); */ 
   if( ( sp = getservbyname(sinPort,"tcp"))==NULL ) 
   { 
  	 ShowMsg("getservbyname : %d,%s\n",errno,strerror(errno)); 
         return sockUnknowServ; 
   } 
   server.sin_port =sp->s_port; 
 
   if( bind( sHandle, ( struct sockaddr * )&server, sizeof(server) ) < 0 )  
   { 
	  ShowMsg("sockcomm : %d,%s\n",errno,strerror(errno)); 
      return sockBindFail; 
   } 
 
 
   iLen = sizeof( server ); 
   if( getsockname( sHandle,( struct sockaddr * )&server, &iLen ) < 0 )  
   { 
	  ShowMsg("sockcomm : %d,%s\n",errno,strerror(errno)); 
      return sockGetSockName; 
   } 
 
   listen(sHandle,Listenum); 
 
   return (sHandle); 
} 
 
int sockServerOpen( int   sinPort,int Listenum) 
{ 
   int sHandle; 
   int iLen; 
   /*int LISTEN; */ 
   struct sockaddr_in server; 
   struct servent *sp,*getservbyname(); 
 
   /*LISTEN=atoi(getenv("LISTEN"));*/ 
   /*if (LISTEN ==0) LISTEN=20;*/ 
   /*if (LISTEN <= 0) 
   { 
	  ShowMsg("env :LISTEN  not found or error\n"); 
      return sockListenError; 
   }*/ 
 
 
   if( ( sHandle = socket( AF_INET, SOCK_STREAM, 0 ) ) < 0 )  
   { 
	  ShowMsg("sockcomm : %d,%s\n",errno,strerror(errno)); 
      return sockOpenFail; 
   } 
 
   memset((char *)&server, 0, sizeof(struct sockaddr_in)); 
   server.sin_family = AF_INET; 
   server.sin_addr.s_addr = INADDR_ANY; 
   server.sin_port = htons(sinPort);  
   /*if( ( sp = getservbyname(sinPort,"tcp"))==NULL ) 
   { 
  	 ShowMsg("getservbyname : %d,%s\n",errno,strerror(errno)); 
         return sockUnknowServ; 
   } 
   server.sin_port =sp->s_port;*/ 
 
   if( bind( sHandle, ( struct sockaddr * )&server, sizeof(server) ) < 0 )  
   { 
	  ShowMsg("sockcomm : %d,%s\n",errno,strerror(errno)); 
      return sockBindFail; 
   } 
 
 
   iLen = sizeof( server ); 
   if( getsockname( sHandle,( struct sockaddr * )&server, &iLen ) < 0 )  
   { 
	  ShowMsg("sockcomm : %d,%s\n",errno,strerror(errno)); 
      return sockGetSockName; 
   } 
 
   listen(sHandle,Listenum); 
 
   return (sHandle); 
} 
 
 
int sockClose( int sHandle ) 
{ 
   close( sHandle ); 
   return( 0 ); 
} 
 
int sockSend( int sHandle, char *pszBuf, int iLen ) 
{ 
   int iRet; 
 
   iRet = send( sHandle, pszBuf, iLen, 0 ); 
   if( iRet < 0 ) { 
	  ShowMsg("sockcomm : %d,%s\n",errno,strerror(errno)); 
		return( sockSendFail ); 
	} 
   return( 0 ); 
} 
 
int sockRecv( int sHandle, char *pszBuf, int iMaxLen ) 
{ 
   int iRet; 
 
   iRet = recv( sHandle, pszBuf, iMaxLen, 0 ); 
   if( iRet < 0 ) { 
	  ShowMsg("sockcomm : %d,%s\n",errno,strerror(errno)); 
	   return( sockRecvFail ); 
   } 
   return ( iRet ); 
} 
 
int sockListen( int sHandle ) 
{ 
   int iSock; 
 
   iSock = accept( sHandle, ( struct sockaddr * )NULL, ( int * )NULL ); 
   if ( iSock == -1 )  
   { 
	  ShowMsg("sockcomm : %d,%s\n",errno,strerror(errno)); 
      return( sockAcceptFail ); 
   } 
   return(iSock); 
} 
 
int sockLook(int sHandle) 
{   
  struct sockaddr_in server; 
  int len,ret; 
  char sHostAddr[20]; 
  int port; 
  len=sizeof(server); 
  ret=getsockname(sHandle,(struct sockaddr * ) &server,&len); 
  if ( ret != 0) 
   { 
	  ShowMsg("sockLook : %d,%s\n",errno,strerror(errno)); 
      return( sockgetnameFail ); 
   } 
 
   sprintf(sHostAddr, "%s", inet_ntoa(server.sin_addr));   
   port=ntohs(server.sin_port); 
   ShowMsg("local ip:port = %s:%d \n",sHostAddr,port);  
 
   ret=getpeername(sHandle,(struct sockaddr * ) &server,&len); 
   if ( ret != 0) 
   { 
	  ShowMsg("sockLook : %d,%s\n",errno,strerror(errno)); 
      return( sockgetpeerFail ); 
   } 
 
   sprintf(sHostAddr, "%s", inet_ntoa(server.sin_addr));   
   port=ntohs(server.sin_port); 
   ShowMsg("remote ip port = %s:%d \n",sHostAddr,port);  
    
}