实现多客户端和服务器之间的通讯(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"#endif2\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
- 实现多客户端和服务器之间的通讯(TCP协议下,多进程)
- 实现客户端和服务器之间的通信(TCP协议、多线程)
- 电骡协议规范(三):客户端和服务器之间的UDP通讯
- Java基于TCP实现服务器和多客户端之间的通信
- Comet通讯:Bayeux协议(ajax实现客户端和服务器的双向交互)
- 基于TCP协议实现服务器和客户端的通信程序
- python3实现TCP协议的简单服务器和客户端
- python3实现TCP协议的简单服务器和客户端
- linux局域网通讯源码(服务器多路复用和客户端多进程模式)(socket)客户端
- winsock实现基于TCP的客户端/服务器通讯
- linux局域网通讯源码(服务器多路复用和客户端多进程模式)(socket)服务器端
- TCP server的实现,和多线程,多进程服务器
- C#基于TCP&UDP实现服务器与多个客户端之间的通信(客户端之间直接通信,不靠服务器端转发消息)
- TCP(二)客户端和服务器通讯
- 关于c++(客户端)和JAVA(服务端)的TCP通讯(基于stomp协议)(一)
- 关于c++(客户端)和JAVA(服务端)的TCP通讯(基于stomp协议)(二)
- 关于c++(客户端)和JAVA(服务端)的TCP通讯(基于stomp协议)(三)
- 使用TCP协议实现客户端和服务器数据传输
- dp——洛谷 P1435 回文字串
- jquery alert提示框自动消失
- 开源项目 无限循环ViewPager InfiniteViewPager 分析(二)
- <textarea></textarea>标签的默认值设置方法
- 双向循环神经网络tensorflow实现
- 实现多客户端和服务器之间的通讯(TCP协议下,多进程)
- 信息检索专题复习
- 三大框架-struts2
- 微服务
- 在IDEA下跑gradle构建的SpringBoot项目启动报“CreateProcess error=206, 文件名或扩展名太长”
- 32种掩码和反掩码
- OkHttp Retrofit RxJava 统一错误处理
- pthread_mutex_unlock实现
- 构建SDK项目开发分享