一个简单基于UDP的回显C/S(一)
来源:互联网 发布:淘宝高仿鞋哪些店铺好 编辑:程序博客网 时间:2024/05/20 16:12
问题:服务器端意外崩溃或重启,客户端不得而知
特点:迭代服务器
服务端代码:
vi s4.c
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/socket.h>#include <arpa/inet.h>#include <errno.h>#include <string.h>#define SERV_PORT 9877#define MAXLINE 4096void server(int sockfd,struct sockaddr* servaddr,size_t len){ char buf[MAXLINE]; int n; socklen_t servlen = len; for (; ;) { if ((n = recvfrom(sockfd,buf,MAXLINE,0,servaddr,&servlen)) < 0) { printf("recvfrom: %s\n",strerror(errno)); exit(1); } if (sendto(sockfd,buf,n,0,(struct sockaddr*)servaddr,servlen) != n) { printf("sendto %s\n",strerror(errno)); exit(1); } }}int main(){ int sockfd; if ((sockfd = socket(AF_INET,SOCK_DGRAM,0)) < 0) { printf("socket: %s\n",strerror(errno)); exit(1); } struct sockaddr_in servaddr; bzero(&servaddr,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(SERV_PORT); servaddr.sin_addr.s_addr = htonl(INADDR_ANY); if (bind(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr)) < 0) { printf("bind %s\n",strerror(errno)); exit(1); } server(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr)); return 0;}
客户端代码:
vi c4.c
#include <stdio.h>#include <stdlib.h>#include <sys/socket.h>#include <arpa/inet.h>#include <errno.h>#include <string.h>#include <unistd.h>#define SERV_PORT 9877#define MAXLINE 4096void client(FILE *fp,int sockfd,const struct sockaddr* servaddr,socklen_t len){ char buf[MAXLINE]; int n; int fd = fileno(fp); if (fd < 0) { printf("fileno: %s\n",strerror(errno)); exit(1); } socklen_t servlen = len; while (1) { if ((n = read(STDIN_FILENO,buf,MAXLINE)) < 0) { printf("read: %s\n",strerror(errno)); exit(1); } if (sendto(sockfd,buf,n,0,servaddr,len) != n) { printf("sendto: %s\n",strerror(errno)); exit(1); } if ((n = recvfrom(sockfd,buf,MAXLINE,0,NULL,NULL)) < 0) { printf("recvfrom: %s\n",strerror(errno)); exit(1); } if (write(fd,buf,n) != n) { printf("write: %s\n",strerror(errno)); exit(1); } }}int main(int argc,char** argv){ if (argc != 2) { printf("add <ipaddress>\n"); exit(1); } int sockfd; if ((sockfd = socket(AF_INET,SOCK_DGRAM,0)) < 0) { printf("socket: %s\n",strerror(errno)); exit(1); } struct sockaddr_in servaddr; bzero(&servaddr,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(SERV_PORT); if (inet_pton(AF_INET,argv[1],&servaddr.sin_addr) < 0) { printf("inet_pton %s\n",strerror(errno)); exit(1); } client(stdout,sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr)); return 0;}
第二次键入时,服务器端已经终止
阅读全文
1 0
- 一个简单基于UDP的回显C/S(一)
- 一个基于UDP的回显C/S(二)
- 一个简单的UDP广播例子(含C/S)
- 一个简单的UDP广播例子(含C/S)
- 一个简单的UDP广播例子(含C/S)
- 基于UDP的C/S多播回射服务器
- windwos平台下C++实现一个基于UDP的C/S模式通信示例
- 一个简单的基于UDP字符界面的聊天应用程序(C/C++)
- 【Java网络编程一】一个简单的c/s程序
- [C语言]基于UDP的基本C/S模型
- 一个简单的TCP/IP并发回显C/S(一)
- 基于UDP的 C/S模式 网络应用程序
- TCP&UDP C/S在linux上的简单实现
- 基于tcp的c/s模型的一个简单的socket实现
- 一个简单的基于udp协议的聊天程序
- 【LINUX编程】一个基于C/S结构的简单通讯程序
- C 基于UDP实现一个简易的聊天室
- 一个简单的回射C/S程序
- 11. posix_mkfifo 有名管道
- 11.2.0.4RAC因内存紧张引起的数据库实例状态为Stuck Archiver
- Oracle 行转列总结 Case When,Decode,PIVOT 三种方式
- iOS 网络请求的Url(音频视频的URL)本地存储
- 高通、阿里、联想上季度的财报都出了,猜猜谁增长最快?
- 一个简单基于UDP的回显C/S(一)
- AndroidStudio因为插件路径错误而无法保存设置的问题
- 升级openssh【linux平台】
- 手机端 rem 的使用
- 解决linux安装软件:/lib/ld-linux.so.2: bad ELF interpreter问题
- 点击微信内网页a标签,直接跳转打开淘宝APP的方法如此简单
- 各领域数据集
- 独家 | 成功创业者9点建议:编程技术?其实没那么重要!
- 算法导论16.2-2--动态规划(0-1背包问题)