//acceptclifd =accept(socket_fd,(structsockaddr*)&cliaddr,&len);if(clifd <0){printf("Accept new client failure:%s\n",strerror(errno));continue;}printf("Accept new client [%s:%d] successfully!\n",inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));//客户端的IP和端口
2.1.5. 通过文件IO系统调用对客户端进行读写
读客户端编程实现,使用read系统调用
{memset(buf,0,sizeof(buf));rv =read(clifd, buf,sizeof(buf));if(rv <0){printf("Read from client by clifd[%d] failure: %s\n", clifd ,strerror(errno));close(clifd);continue;}elseif(rv ==0){printf("Clifd[%d] get disconnected\n", clifd);close(clifd);continue;}elseif(rv >0){printf("Read [%d] byte data from client clifd[%d] : %s\n", rv, clifd, buf);}}
对客户端进行write写消息,注意写完后不想继续通讯,需要关闭客户端描述符。
{rv =write(clifd, MSG_STR,strlen(MSG_STR));if(rv <0){printf("write to client by clifd[%d] failure: %s\n", clifd ,strerror(errno));close(clifd);continue;}printf("Close client fd[%d]\n", clifd);close(clifd);}
{memset(&servaddr,0,sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_port =htons(port);// 主----> 网inet_aton(servip,&servaddr.sin_addr);//字符串 -----> 网络字节序rv =connect(socket_fd,(structsockaddr*)&servaddr,sizeof(servaddr));if(rv <0){printf("Connect to server [%s:%d] failure : %s\n", servip, port,strerror(errno));return-2;}printf("Connect to server [%s:%d] successful!\n", servip, port);}
2.2.4. 通过文件IO系统调用对服务器进行读写
和服务器一样,使用read和write进行消息的读写
注意客户端与服务器结束通讯后,不想继续通讯便可关闭socket描述符
{rv =write(socket_fd, MSG_STR,strlen(MSG_STR));if(rv <0){printf("Write to server by socket_fd [%d] failure : %s\n", socket_fd,strerror(errno));break;}//readmemset(buf,0,sizeof(buf));rv =read(socket_fd, buf,sizeof(buf));if(rv <0){printf("Read from server by sockfd[%d] failure: %s\n", socket_fd ,strerror(errno));break;}elseif(0== rv){printf("Socketfd[%d] get disconnected\n", socket_fd);break;}elseif(rv >0){printf("Read [%d] byte from server socket_fd [%d] : %s\n", rv, socket_fd, buf);}close(socket_fd);}