实现多客户端和服务器之间的通讯(TCP协议下,多进程)

来源:互联网 发布:西游记解读知乎 编辑:程序博客网 时间:2024/06/06 08:59

1、myhead.h

#ifndef _MYHEAD_H_#define _MYHEAD_H_#include <string.h>#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <unistd.h>#include <sys/wait.h>#define MYPORT 6666#define MYADDR "192.168.1.100"#endif
2\tcp_server.c

#include "myhead.h"int main(){int sockfd = 0;int ret = 0;int clientfd = 0;int recvcnt = 0;int sendcnt = 0;char recvbuff[20] = {0};char sendbuff[20] = {0};pid_t pid;struct sockaddr_in server_addr;struct sockaddr_in client_addr;socklen_t len = 0; sockfd = socket(AF_INET,SOCK_STREAM,0);if(sockfd == -1){perror("socket");return -1;}printf("socket sucessfully...\n");bzero(&server_addr,sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_port = htons(MYPORT);server_addr.sin_addr.s_addr = inet_addr(MYADDR);ret = bind(sockfd,(struct sockaddr *)&server_addr,sizeof(server_addr));if(ret == -1){perror("bind");return -1;}printf("bind sucessfully...\n");ret = listen(sockfd,10);if(ret == -1){perror("listen");return -1;}printf("listen sucessfully...\n");while(1){clientfd = accept(sockfd,(struct sockaddr *)&client_addr,&len);if(clientfd == -1){perror("accept");return -1;}printf("accept sucessully...\n");pid = fork();if(pid == 0){while(1){memset(recvbuff,0,sizeof(recvbuff));//recvcnt = recv(clientfd,recvbuff,sizeof(recvbuff),0);//recvcnt = read(clientfd,recvbuff,sizeof(recvbuff));recvcnt = recvfrom(clientfd,recvbuff,sizeof(recvbuff),0,NULL,0);if(recvcnt == -1){perror("receive");return -1;}else{printf("receive %d bytes from client: %s\n",recvcnt,recvbuff);}if(strcmp(recvbuff,"end") == 0){break;}}}else if(pid > 0){close(clientfd);waitpid(-1,NULL,WNOHANG);}/*memset(sendbuff,0,sizeof(sendbuff));printf("please input data:\n");scanf("%s",sendbuff);sendcnt = write(clientfd,sendbuff,strlen(sendbuff));if(sendcnt == -1){perror("server send");return -1;}else{printf("server %d bytes:%s\n",sendcnt,sendbuff);}*/}//close(clientfd);close(sockfd);return 0;}

3、tcp_client.c
#include "myhead.h"int main(){int sockfd = 0;int ret = 0;struct sockaddr_in server_addr;char sendbuff[20] = {0};char recvbuff[20] = {0};int sendcnt = 0;int recvcnt = 0;sockfd = socket(AF_INET,SOCK_STREAM,0);if(sockfd == -1){perror("socket");return -1;}printf("socket sucessfully...\n");bzero(&server_addr,sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_port = htons(MYPORT);server_addr.sin_addr.s_addr = inet_addr(MYADDR);ret = connect(sockfd,(struct sockaddr *)&server_addr,sizeof(server_addr));if(ret == -1){perror("connect");return -1;}printf("connect sucessfully...\n");while(1){memset(sendbuff,0,sizeof(sendbuff));printf("plaese input data:\n");scanf("%s",sendbuff);//sendcnt = send(sockfd,sendbuff,strlen(sendbuff),0);//sendcnt = write(sockfd,sendbuff,strlen(sendbuff));sendcnt = sendto(sockfd,sendbuff,strlen(sendbuff),0,NULL,0);if(sendcnt == -1){perror("send");}else{printf("client send %d bytess :%s\n",sendcnt,sendbuff);}/*memset(recvbuff,0,sizeof(recvbuff));recvcnt = read(sockfd,recvbuff,sizeof(recvbuff));if(recvcnt == -1){perror("recevive");return -1;}else{printf("recieve %d bytes :%s\n",recvcnt,recvbuff);}*/if(strcmp(sendbuff,"end") == 0){break;}}close(sockfd);return 0;}


阅读全文
0 0
原创粉丝点击