//echo_s.c #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <netinet/in.h> #include <sys/socket.h> #include <arpa/inet.h> #include <sys/wait.h> #define PORT 4567 //服务器监听端口 #define MAXLISTENNUM 10 // 设定最大监听数量 #define MAXSIZE 100 //设定最大数据传输量 int main(int argc, char* argv[]) { char szrecvbuf[MAXSIZE]; memset(szrecvbuf,0,sizeof(szrecvbuf)); int nlisten_sock;//监听socket int naccetp_sock;//数据传输socket struct sockaddr_in local_addr;//本地地址信息 struct sockaddr_in remote_addr;//客户端地址信息 int nsize = sizeof(struct sockaddr_in); if(-1 == (nlisten_sock = socket(AF_INET,SOCK_STREAM,0))) { printf("create socket error!/n"); } local_addr.sin_family = AF_INET; local_addr.sin_port = htons(PORT); local_addr.sin_addr.s_addr = INADDR_ANY; bzero(&(local_addr.sin_zero),8); if(-1 == bind(nlisten_sock,(struct sockaddr*)&local_addr,sizeof(struct sockaddr))) { printf("bind error!/n"); } if(-1 == listen(nlisten_sock,MAXLISTENNUM)) { printf("listen error!/n"); } while(1) { if(-1 == (naccetp_sock = accept(nlisten_sock,(struct sockaddr*)&remote_addr,&nsize))) { printf("accept error!/n"); continue; } else { printf("server: got connection from %s/n",inet_ntoa(remote_addr.sin_addr)); size_t slen = send(naccetp_sock,"hello!!!!",10,0); if(0 == slen) { printf("send error!/n"); close(naccetp_sock); return 0; } else { printf("server send data: hello!!!!/n"); printf("server send %d bytes/n",slen); } size_t srecvlen = recv(naccetp_sock,szrecvbuf,MAXSIZE,0); if(0 == srecvlen) { printf("recv error!/n"); } else { printf("recv client data :%s /n",szrecvbuf); } close(naccetp_sock); } } close(nlisten_sock); return 0; } //===================================================== //echo_c.c #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <netinet/in.h> #include <sys/socket.h> #include <arpa/inet.h> #include <sys/wait.h> #include <netdb.h> #define PORT 4567 //服务器监听端口 #define MAXSIZE 100 //设定最大数据传输量 int main(int argc, char* argv[]) { int nlocal_sock; struct sockaddr_in remote_addr; //远程地址信息 char szrecvbuf[MAXSIZE]; char szsendbuf[MAXSIZE]; memset(szrecvbuf,0,sizeof(szrecvbuf)); memset(szsendbuf,0,sizeof(szsendbuf)); int nsize = sizeof(struct sockaddr_in); if(-1 == (nlocal_sock = socket(AF_INET,SOCK_STREAM,0))) { printf("create socket error!/n"); } remote_addr.sin_family = AF_INET; remote_addr.sin_port = htons(PORT); remote_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); bzero(&(remote_addr.sin_zero),8); if(-1 == (connect(nlocal_sock,(struct sockaddr*)&remote_addr,sizeof(struct sockaddr)))) { printf("connect error!/n"); } size_t slen = recv(nlocal_sock,szrecvbuf,MAXSIZE,0); if(0 == slen) { printf("recv error!/n"); } else { printf("Clinet recv date from Server: %s/n",szrecvbuf); size_t slen = send(nlocal_sock,szrecvbuf,MAXSIZE,0); if(0 == slen) { printf("send error!/n"); } else { printf("client send data: %s/n",szrecvbuf); printf("client send %d bytes/n",slen); } } close(nlocal_sock); return 0; } 终端输入: gcc -g -o echo_s echo_s.c ./echo_s gcc -g -o echo_c echo_c.c ./echo_c