linux网络编程用到的网络函数详解用和使用示例

2019-09-23 09:45:17王振洲

    exit(1);
   }
   /* 客户程序开始建立 sockfd描述符 */
   if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){
    fprintf(stderr,"socket Error:%san",strerror(errno));
     exit(1);
   }
   /* 客户程序填充服务端的资料 */
   bzero(&srvaddr,sizeof(srvaddr));
  srvaddr.sin_family=AF_INET;
   srvaddr.sin_port=htons(atoi(argv[2]));
  if (inet_pton(AF_INET, argv[1], &srvaddr.sin_addr) <= 0){
     fprintf(stderr,"inet_pton Error:%san",strerror(errno));
    exit(1);
   }
  /* 客户程序发起连接请求 */
  if(connect(sockfd,(struct sockaddr *)(&srvaddr),sizeof(struct sockaddr))==-1){
     fprintf(stderr,"connect Error:%san",strerror(errno));
    exit(1);
   }
  /* 连接成功了 */
  if((nbytes=read(sockfd,buf,1024))==-1){
    fprintf(stderr,"read Error:%sn",strerror(errno));
    exit(1);
  }
   buf[nbytes]='';
  printf("received data:%sn",buf);
   /* 结束通讯 */
  close(sockfd);
  exit(0);
}
 

四.上述程序存在的问题
先运行上述程序的服务端程序,再运行客户端程序,可以得到如下结果:
服务器端结果:
viidiot@ubuntu:~/code $ ./srv
Server get connection from 192.168.1.153
Server get connection from 127.0.0.1
Server get connection from 192.168.1.153
客户器端结果:
viidiot@ubuntu:~/code $ ./cli 192.168.1.153 1113
received data:Hi,welcome to linux-code!
我们完成了一个简单的网络通信程序,该程序使用的io模型为同步(synchronous)阻塞(blocking)。服务器端调用accept(),write()等函数,如果没有客户端连接过来或者相应的文件描述符没有准备好写,程序就会在那里死死的等待,什么事情也不干。在实际应用中,这类程序是很少出现的。实际中使用的都是异步io模型。