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模型。










