socket.c
上传用户:sdtbys
上传日期:2009-12-06
资源大小:13k
文件大小:8k
源码类别:

并口编程

开发平台:

C/C++

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <errno.h>
  5. #include <sys/types.h>
  6. #include <sys/socket.h>
  7. #include <netinet/in.h>
  8. #include <netdb.h>
  9. #include <signal.h>
  10. #include <unistd.h>
  11. #define sockOpenFail -12001
  12. #define sockBindFail -12002
  13. #define sockGetSockName -12003
  14. #define sockSendFail -12004
  15. #define sockRecvFail -12005
  16. #define sockUnknowHost  -12006
  17. #define sockConnectFail -12007
  18. #define sockAcceptFail -12008
  19. #define sockUnknowServ  -12009
  20. #define sockgetnameFail -12010
  21. #define sockgetpeerFail -12011
  22. #define sockListenError -12012
  23. int SockClientOpen(char *pszHost,char *sinPort);
  24. int sockClientOpen(char *pszHost,int sinPort);
  25. int SockServerOpen(char *sinPort,int Listenum);
  26. int sockServerOpen(int sinPort,  int Listenum);
  27. int sockClose(int sHandle);
  28. int sockSend(int sHandle,char *pszBuf,int iLen);
  29. int sockRecv(int sHandle,char *pszBuf,int iMaxLen);
  30. int sockListen(int sHandle);
  31. int sockLook(int sHandle);
  32. extern int errno;
  33. extern char **environ;
  34. /*static int Listensock;*/
  35. int SockClientOpen( char *pszHost, char *sinPort )
  36. {
  37.    int sHandle;
  38.    u_long hl;
  39.    struct sockaddr_in server;
  40.    struct hostent *hp,*gethostbyname();
  41.    struct servent *sp,*getservbyname();
  42.    
  43.    if( ( sHandle = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ) ) < 0 ) 
  44.    {
  45.   ShowMsg("clinetopen:socket : %d,%sn",errno,strerror(errno));
  46.       return sockOpenFail;
  47.    }
  48.    memset((char *)&server,0,sizeof(struct sockaddr_in));
  49.    server.sin_family=AF_INET;
  50.    /*server.sin_port = htons(sinPort);*/
  51.    if( ( sp = getservbyname(sinPort,"tcp"))==NULL )
  52.    {
  53.     ShowMsg("getservbyname : %d,%sn",errno,strerror(errno));
  54.          return sockUnknowServ;
  55.    }
  56.    server.sin_port =sp->s_port;
  57.    /*hl=inet_addr(pszHost); 
  58.      memcpy( (char *)&server.sin_addr, (char *)&hl, 4 ); */
  59.    if( ( hp = gethostbyname( pszHost ) ) == NULL ) 
  60.    {
  61.     ShowMsg("gethostbyname : %d,%sn",errno,strerror(errno));
  62.          return sockUnknowHost;
  63.    }
  64.    memcpy( (char *)&server.sin_addr, (char *)hp->h_addr, hp->h_length );
  65.    if( connect( sHandle, (struct sockaddr *)&server, sizeof(server) ) < 0 ) 
  66.    {
  67.   ShowMsg("connect : %d,%sn",errno,strerror(errno));
  68.       close(sHandle);
  69.       return sockConnectFail;
  70.    }
  71.    return( sHandle );
  72. }
  73. int sockClientOpen( char *pszHost, int sinPort )
  74. {
  75.    int sHandle;
  76.    u_long hl;
  77.    struct sockaddr_in server;
  78.    struct hostent *hp,*gethostbyname();
  79.    struct servent *sp,*getservbyname();
  80.    
  81.    if( ( sHandle = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ) ) < 0 ) 
  82.    {
  83.   ShowMsg("clinetopen:socket : %d,%sn",errno,strerror(errno));
  84.       return sockOpenFail;
  85.    }
  86.    memset((char *)&server,0,sizeof(struct sockaddr_in));
  87.    server.sin_family=AF_INET;
  88.    server.sin_port = htons(sinPort);
  89.    /*if( ( sp = getservbyname(sinPort,"tcp"))==NULL )
  90.    {
  91.     ShowMsg("getservbyname : %d,%sn",errno,strerror(errno));
  92.          return sockUnknowServ;
  93.    }
  94.    server.sin_port =sp->s_port;*/
  95.    hl=inet_addr(pszHost); 
  96.    memcpy( (char *)&server.sin_addr, (char *)&hl, 4 );
  97.    /*if( ( hp = gethostbyname( pszHost ) ) == NULL ) 
  98.    {
  99.     ShowMsg("gethostbyname : %d,%sn",errno,strerror(errno));
  100.          return sockUnknowHost;
  101.    }
  102.    memcpy( (char *)&server.sin_addr, (char *)hp->h_addr, hp->h_length );
  103.    */
  104.    if( connect( sHandle, (struct sockaddr *)&server, sizeof(server) ) < 0 ) 
  105.    {
  106.   ShowMsg("connect : %d,%sn",errno,strerror(errno));
  107.       close(sHandle);
  108.       return sockConnectFail;
  109.    }
  110.    return( sHandle );
  111. }
  112. int SockServerOpen( char *sinPort,int Listenum)
  113. {
  114.    int sHandle;
  115.    int iLen;
  116.    /*int LISTEN;*/
  117.    struct sockaddr_in server;
  118.    struct servent *sp,*getservbyname();
  119.    /*LISTEN=atoi(getenv("LISTEN"));*/
  120.    /*if (LISTEN ==0) LISTEN=20;*/
  121.    /*if (LISTEN <= 0)
  122.    {
  123.   ShowMsg("env :LISTEN  not found or errorn");
  124.       return sockListenError;
  125.    }*/
  126.    if( ( sHandle = socket( AF_INET, SOCK_STREAM, 0 ) ) < 0 ) 
  127.    {
  128.   ShowMsg("sockcomm : %d,%sn",errno,strerror(errno));
  129.       return sockOpenFail;
  130.    }
  131.    memset((char *)&server, 0, sizeof(struct sockaddr_in));
  132.    server.sin_family = AF_INET;
  133.    server.sin_addr.s_addr = INADDR_ANY;
  134.   /* server.sin_port = htons(sinPort); */
  135.    if( ( sp = getservbyname(sinPort,"tcp"))==NULL )
  136.    {
  137.     ShowMsg("getservbyname : %d,%sn",errno,strerror(errno));
  138.          return sockUnknowServ;
  139.    }
  140.    server.sin_port =sp->s_port;
  141.    if( bind( sHandle, ( struct sockaddr * )&server, sizeof(server) ) < 0 ) 
  142.    {
  143.   ShowMsg("sockcomm : %d,%sn",errno,strerror(errno));
  144.       return sockBindFail;
  145.    }
  146.    iLen = sizeof( server );
  147.    if( getsockname( sHandle,( struct sockaddr * )&server, &iLen ) < 0 ) 
  148.    {
  149.   ShowMsg("sockcomm : %d,%sn",errno,strerror(errno));
  150.       return sockGetSockName;
  151.    }
  152.    listen(sHandle,Listenum);
  153.    return (sHandle);
  154. }
  155. int sockServerOpen( int   sinPort,int Listenum)
  156. {
  157.    int sHandle;
  158.    int iLen;
  159.    /*int LISTEN; */
  160.    struct sockaddr_in server;
  161.    struct servent *sp,*getservbyname();
  162.    /*LISTEN=atoi(getenv("LISTEN"));*/
  163.    /*if (LISTEN ==0) LISTEN=20;*/
  164.    /*if (LISTEN <= 0)
  165.    {
  166.   ShowMsg("env :LISTEN  not found or errorn");
  167.       return sockListenError;
  168.    }*/
  169.    if( ( sHandle = socket( AF_INET, SOCK_STREAM, 0 ) ) < 0 ) 
  170.    {
  171.   ShowMsg("sockcomm : %d,%sn",errno,strerror(errno));
  172.       return sockOpenFail;
  173.    }
  174.    memset((char *)&server, 0, sizeof(struct sockaddr_in));
  175.    server.sin_family = AF_INET;
  176.    server.sin_addr.s_addr = INADDR_ANY;
  177.    server.sin_port = htons(sinPort); 
  178.    /*if( ( sp = getservbyname(sinPort,"tcp"))==NULL )
  179.    {
  180.     ShowMsg("getservbyname : %d,%sn",errno,strerror(errno));
  181.          return sockUnknowServ;
  182.    }
  183.    server.sin_port =sp->s_port;*/
  184.    if( bind( sHandle, ( struct sockaddr * )&server, sizeof(server) ) < 0 ) 
  185.    {
  186.   ShowMsg("sockcomm : %d,%sn",errno,strerror(errno));
  187.       return sockBindFail;
  188.    }
  189.    iLen = sizeof( server );
  190.    if( getsockname( sHandle,( struct sockaddr * )&server, &iLen ) < 0 ) 
  191.    {
  192.   ShowMsg("sockcomm : %d,%sn",errno,strerror(errno));
  193.       return sockGetSockName;
  194.    }
  195.    listen(sHandle,Listenum);
  196.    return (sHandle);
  197. }
  198. int sockClose( int sHandle )
  199. {
  200.    close( sHandle );
  201.    return( 0 );
  202. }
  203. int sockSend( int sHandle, char *pszBuf, int iLen )
  204. {
  205.    int iRet;
  206.    iRet = send( sHandle, pszBuf, iLen, 0 );
  207.    if( iRet < 0 ) {
  208.   ShowMsg("sockcomm : %d,%sn",errno,strerror(errno));
  209. return( sockSendFail );
  210. }
  211.    return( 0 );
  212. }
  213. int sockRecv( int sHandle, char *pszBuf, int iMaxLen )
  214. {
  215.    int iRet;
  216.    iRet = recv( sHandle, pszBuf, iMaxLen, 0 );
  217.    if( iRet < 0 ) {
  218.   ShowMsg("sockcomm : %d,%sn",errno,strerror(errno));
  219.    return( sockRecvFail );
  220.    }
  221.    return ( iRet );
  222. }
  223. int sockListen( int sHandle )
  224. {
  225.    int iSock;
  226.    iSock = accept( sHandle, ( struct sockaddr * )NULL, ( int * )NULL );
  227.    if ( iSock == -1 ) 
  228.    {
  229.   ShowMsg("sockcomm : %d,%sn",errno,strerror(errno));
  230.       return( sockAcceptFail );
  231.    }
  232.    return(iSock);
  233. }
  234. int sockLook(int sHandle)
  235. {  
  236.   struct sockaddr_in server;
  237.   int len,ret;
  238.   char sHostAddr[20];
  239.   int port;
  240.   len=sizeof(server);
  241.   ret=getsockname(sHandle,(struct sockaddr * ) &server,&len);
  242.   if ( ret != 0)
  243.    {
  244.   ShowMsg("sockLook : %d,%sn",errno,strerror(errno));
  245.       return( sockgetnameFail );
  246.    }
  247.    sprintf(sHostAddr, "%s", inet_ntoa(server.sin_addr));  
  248.    port=ntohs(server.sin_port);
  249.    ShowMsg("local ip:port = %s:%d n",sHostAddr,port); 
  250.    ret=getpeername(sHandle,(struct sockaddr * ) &server,&len);
  251.    if ( ret != 0)
  252.    {
  253.   ShowMsg("sockLook : %d,%sn",errno,strerror(errno));
  254.       return( sockgetpeerFail );
  255.    }
  256.    sprintf(sHostAddr, "%s", inet_ntoa(server.sin_addr));  
  257.    port=ntohs(server.sin_port);
  258.    ShowMsg("remote ip port = %s:%d n",sHostAddr,port); 
  259.    
  260. }