导读:基于TCP/IP协议的服务器端与客户端的实现。
1.服务器端
#include#include #include #include #include #include #include #include #include #include int main(int argc,const char* argv[]) { int sockfd = 0; sockfd = socket(AF_INET,SOCK_STREAM,0); if(sockfd == -1) { perror("socket"); exit(1); } else { printf("sockfd:%dn",sockfd); //bind int flag = 0; struct sockaddr_in ser; bzero(&ser,sizeof(ser)); socklen_t len = sizeof(ser); ser.sin_family = AF_INET; ser.sin_port = htons(atoi(argv[2])); ser.sin_addr.s_addr = inet_addr(argv[1]); flag = bind(sockfd,(struct sockaddr*)&ser,len); if(flag == -1) { perror("bind"); exit(1); } else { //listen int retval = 0; retval = listen(sockfd,10); if(retval == -1) { perror("listen"); exit(1); } else { puts("-------init success ,ready go!!!!-----"); } int accfd = 0; struct sockaddr_in cli; bzero(&cli,sizeof(cli)); accfd = accept(sockfd,(struct sockaddr*)&cli,&len); printf("[%s-%d]online lalalalan", inet_ntoa(cli.sin_addr), ntohs(cli.sin_port)); if(accfd == -1) { perror("accept"); exit(1); } else { printf("accfd:%dn",accfd); ssize_t rd = 0; while(1) { char buf[100] = {0}; rd = read(accfd,buf,sizeof(buf)); if(rd == -1) { perror("read"); exit(1); } else if(rd == 0) { printf("exit!n"); break; } else { printf("[%s-%d]%sn", inet_ntoa(cli.sin_addr), ntohs(cli.sin_port),buf); } } } } } return 0; }
2.客户端
#include#include #include #include #include #include #include #include #include #include int main(int argc,const char* argv[]) { // create socket int sockfd = socket(AF_INET,SOCK_STREAM,0); if(sockfd == -1) { perror("socket"); exit(1); } // connect server struct sockaddr_in ser; bzero(&ser,sizeof(ser)); socklen_t len = sizeof(ser); ser.sin_family = AF_INET; ser.sin_port = htons(atoi(argv[2])); ser.sin_addr.s_addr = inet_addr(argv[1]); int flag = connect(sockfd,(struct sockaddr*)&ser,len); if(flag == -1) { perror("connect"); exit(1); } char buf[128] = {0}; ssize_t rcv = 0; while(1) { //send message to server bzero(buf,sizeof(buf)); printf("Input send to server:"); scanf("%s",buf); while(getchar() != 'n'); rcv = write(sockfd,buf,strlen(buf)); if(rcv == -1) { perror("write"); exit(1); } else { printf("send success!n"); } // receive message from server printf("是否接收来自服务器的消息(y/n):"); while(1) { char ch = 0; scanf("%c",&ch); while(getchar() != 'n'); if(ch == 'y') { bzero(buf,sizeof(buf)); rcv = read(sockfd,buf,sizeof(buf)); if(rcv == -1) { perror("read"); exit(1); } else { printf("from server:%sn",buf); break; } } else if(ch == 'n') { break; } else { printf("输入错误,请输入y/n:"); } } } return 0; }



