socket编程详解(2-2) 回射客户/服务器模型
回射客户/服务器模型

举个栗子:
服务器端代码:
#include<stdio.h> #include <sys/socket.h> #include<sys/types.h> #include<unistd.h> #include <netinet/in.h> #include <arpa/inet.h> #include<stdlib.h> #include<errno.h> #include<string.h> int main() { int sockfd; if((sockfd = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) < 0) printf("socket err"); struct sockaddr_in servaddr; memset(&servaddr,0,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(5188); servaddr.sin_addr.s_addr = htonl(INADDR_ANY); if(bind(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr)) < 0) printf("blind err"); if (listen(sockfd,SOMAXCONN) < 0 ) printf("listen err:"); struct sockaddr_in peeraddr; socklen_t peerlen = sizeof(peeraddr); int conn; if ((conn = accept(sockfd,(struct sockaddr*)&peeraddr,&peerlen)) < 0 ) printf("accept err"); char recvbuf[1024]; while(1) { memset(recvbuf,0,sizeof(recvbuf)); int ret = read(conn,recvbuf,sizeof(recvbuf)); fputs(recvbuf,stdout); write(conn,recvbuf,ret); } close(conn); close(sockfd); return 0; }
客户端代码:
#include<stdio.h> #include <sys/socket.h> #include<sys/types.h> #include<unistd.h> #include <netinet/in.h> #include <arpa/inet.h> #include<stdlib.h> #include<errno.h> #include<string.h> int main() { int sockfd; if((sockfd = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) < 0) printf("socket err"); struct sockaddr_in servaddr; memset(&servaddr,0,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(5188); servaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); if(connect(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr)) <0) printf("connect err"); char sendbuf[1024]={0}; char recvbuf[1024]={0}; while(fgets(sendbuf,sizeof(sendbuf),stdin) != NULL) { write(sockfd,sendbuf,strlen(sendbuf)); read(sockfd,recvbuf,sizeof(recvbuf)); fputs(recvbuf,stdout); memset(sendbuf,0,sizeof(sendbuf)); memset(recvbuf,0,sizeof(recvbuf)); } close(sockfd); return 0; }
客户端:
renzhuang@geroge:~/netcoding/07socket$ ./01sock_client
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa //输入
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa //回显
服务器端;
renzhuang@geroge:~/netcoding/07socket$ ./01sock_server
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa //显示

浙公网安备 33010602011771号