#include <mystdio.h>
#define PORT 8888
 #define IP "192.168.124.18"
int main(int argc, const char *argv[])
 {
     //创建流式套接字文件
     int sfd = socket(AF_INET,SOCK_STREAM,0);
     if(sfd < 0)
     {
         perror("socket");
         return -1;
     }
     printf("socket seccuss sfd = %d  __%d__\n",sfd,__LINE__);
     
     int reuse = 1;
     if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0)
     {
         perror("setsockopt");
         return -1;
     }
     //AF_INET
     struct sockaddr_in sin;
     sin.sin_family = AF_INET;
     sin.sin_port = htons(PORT);
     sin.sin_addr.s_addr = inet_addr(IP);
    //绑定服务器自身的地址信息
     if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin)) < 0)
     {
         perror("bind");
         return -1;
     }
     printf("bind seccuss __%d__\n",__LINE__);
     //将套接字设置为被动监听状态
     if(listen(sfd,128) < 0)
     {
         perror("listen");
         return -1;
     }
     printf("listen seccuss __%d__\n",__LINE__);
    struct sockaddr_in cin;
     socklen_t addrlen = sizeof(cin);
     //获取链接成功的套接字
     int newfd = accept(sfd,(struct sockaddr*)&cin,&addrlen);
     if(newfd < 0)
     {
         perror("accept");
         return -1;
     }
     printf("[%s:%d] 客户端连接成功 newfd=%d __%d__\n",\
             inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd,__LINE__);
     
    char buf[128];
     ssize_t res;
     while(1)
     {
         bzero(buf,sizeof(buf));
         res = recv(newfd,buf,sizeof(buf),0);
         if(res < 0)
         {
             perror("recv");
             return -1;
         }
         else if(0 == res)
         {
             printf("[%s:%d] 客户端下线 __%d__\n",\
                     inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),__LINE__);
             break;
         }
         printf("[%s:%d] 客户端连接成功 newfd=%d __%d__\n",\
             inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd,__LINE__);
    }
     close(newfd);
     close(sfd);
    return 0;
 }