在路上...

The development of life
我们一直都在努力,有您的支持,将走得更远...

站内搜索: Google

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

初始化SOCKET(客户端)  连接到host的port端口
/////////////////////////////////////////////
int InitSocket_Client(unsigned char *host,int port)
{
    int sockfd;
 struct hostent *he;
 struct sockaddr_in srvaddr;
    int connectflag;
   
 he=gethostbyname(host);
 sockfd=socket(AF_INET,SOCK_STREAM,0);
 bzero(&srvaddr,sizeof(srvaddr));
 srvaddr.sin_family=AF_INET;
 srvaddr.sin_port=htons(port);
 srvaddr.sin_addr=*((struct in_addr *)he->h_addr);
    do {
        connectflag=connect(sockfd,(struct sockaddr *) &srvaddr, sizeof(struct sockaddr));
        switch (connectflag) {
        case EACCES:
             printf("InitSocket_Client:Write permission is denied!\n");
             break;
        case EADDRINUSE:
             printf("InitSocket_Client:Local address is already in use!\n");
             break;
        case EAGAIN:
             printf("InitSocket_Client:No more free local ports!\n");
             break;
        case ECONNREFUSED:
             printf("InitSocket_Client:No one listening on the remote address!\n");
             break;
        case EINPROGRESS:
             printf("InitSocket_Client:The socket is non-blocking and the connection cannot be completed immediately!\n");
             break;
        case EINTR:
             printf("InitSocket_Client:The system call was interrupted by a signal that was caught!\n");
             break;
        case ETIMEDOUT:
             printf("InitSocket_Client:Timeout while attempting connection!\n");
             break;
        default:
             printf("InitSocket_Client:Error!\n");
             break;            
        }
    } while (connectflag==EISCONN);
    return sockfd;
}


初始化SOCKET(服务器端) 监听port端口
////////////////////////////////////////////


int InitSocket_Server(int port)
{
    int sockfd, new_fd;
    socklen_t len;
    int one=1;
    struct sockaddr_in my_addr, their_addr;
    unsigned int  lisnum;
    if ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1) {
          perror("socket");
          return -1;
      }
      //fcntl(sockfd,F_SETFL,O_NONBLOCK);
    bzero(&my_addr, sizeof(my_addr));
    my_addr.sin_family = PF_INET;
    my_addr.sin_port = htons(port);
    my_addr.sin_addr.s_addr = INADDR_ANY;
    if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *) &one, sizeof(int))==-1)
    {
      perror("setsockopt\n");
      return -1;
    }
    if(bind(sockfd, (struct sockaddr *) &my_addr, sizeof(struct sockaddr))==-1)
    {
        perror("bind\n");
        return -1;
    }
    if(listen(sockfd, lisnum) == -1)
      {
          perror("listen\n");
          return -1;
      }
    len=sizeof(struct sockaddr_in);
    if ((new_fd =accept(sockfd, (struct sockaddr *) &their_addr,&len)) == -1) {
          perror("accept\n");
          return -1;
      }
    return new_fd;

 

posted on 2009-08-24 15:15  palam  阅读(1461)  评论(0编辑  收藏  举报