点对点通网络通信程序
来源:互联网 发布:卷帘门价格算法 编辑:程序博客网 时间:2024/06/07 02:03
服务器端、
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<ctype.h>#include<signal.h>void handler(int sig){ printf("recv a sig=%d\n",sig); exit(EXIT_SUCCESS);}int main(){int listenfd;listenfd = socket(AF_INET, SOCK_STREAM, 0);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);int on = 1;setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr));listen(listenfd, 20);while (1){struct sockaddr_in cliaddr;socklen_t cliaddr_len;int connfd = accept(listenfd, (struct sockaddr*)&cliaddr, &cliaddr_len);printf("ip=%s port=%d\n", inet_ntoa(cliaddr.sin_addr), ntohs(cliaddr.sin_port));pid_t pid = fork();if (pid < 0){printf("error\n");}if (pid == 0){close(listenfd);char sendbuf[1024] = { 0 };while (fgets(sendbuf, sizeof(sendbuf), stdin) != NULL){write(connfd, sendbuf, strlen(sendbuf));memset(sendbuf, 0, sizeof(sendbuf));} printf("server child close\n"); kill(pid,SIGUSR1); exit(EXIT_SUCCESS);}else if (pid > 0){char recvbuf[1024]; signal(SIGUSR1,handler); while (1){memset(recvbuf, 0, sizeof(recvbuf));int ret = read(connfd, recvbuf, sizeof(recvbuf));if (ret == -1){ printf("error\n"); exit(0);}if (ret == 0){printf("client close\n");break;}fputs(recvbuf, stdout);} printf("server parent close\n"); exit(EXIT_SUCCESS);}}close(listenfd);}客户端
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<ctype.h>#include<signal.h>const int MAX = 128;void handler(int sig){ printf("recv a sig=%d\n",sig); exit(EXIT_SUCCESS);}int main(){int sockfd;sockfd = socket(AF_INET, SOCK_STREAM, 0);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");connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr));pid_t pid = fork();if (pid < 0){printf("error\n");}else if (pid == 0){char sendbuf[MAX] = { 0 };while (fgets(sendbuf, sizeof(sendbuf), stdin)){write(sockfd, sendbuf, strlen(sendbuf));memset(sendbuf, 0, MAX);} printf("client child close\n");kill(getpid(),SIGUSR1);exit(EXIT_SUCCESS);}else if (pid > 0){ signal(SIGUSR1,handler); char recvbuf[MAX] = { 0 };while (1){int n = read(sockfd, recvbuf, MAX);if (n == -1) { printf("error\n"); exit(0); }else if (n == 0){printf("server close\n");break;}fputs(recvbuf, stdout);memset(recvbuf, 0, MAX);} printf("client paretn close\n");exit(EXIT_SUCCESS);}close(sockfd);}
阅读全文
0 0
- 点对点通网络通信程序
- Winsock控件,实现网络点对点通信
- 点对点语音通信程序笔记链接
- 点对点通信
- 网络学习第四天-点对点的网络通信加强
- 基于TCP协议的点对点通信java程序,带图形界面
- Linux网络编程之简易的点对点聊天程序程序
- 网络编程中简单的点对点聊天程序
- Linux网络编程学习笔记-简单点对点聊天程序--6
- 点对点语音通信
- 点对点语音通信
- 点对点语音通信(转)
- MPI学习-点对点通信
- opnet点对点通信模型
- Zigbee 点对点通信
- MPI学习-点对点通信
- 点对点通信-简介
- MPI—点对点通信
- spring bean的使用总结
- Boolean Expressions
- jvm01--java内存区域
- 一个demo学会c#
- 阿里编程测验题
- 点对点通网络通信程序
- 邮票分你一半 NSOJ
- WebView加载https页面不能正常显示资源问题
- CURL使用(error LNK2019)
- Python迭代器与装饰器
- 全面认识ES6(二)
- 手把手教你制作Excel抽奖器
- 选择option之后,触发js时间, 判断选择的是什么
- hdu 6058 Kanade's sum 维护链表