一个基于UDP的回显C/S(二)
来源:互联网 发布:宁夏干部网络培训平台 编辑:程序博客网 时间:2024/06/05 15:14
解决问题:通过connect,使服务器端意外崩溃,重启,客户端能通过read函数而得知
服务器端代码:
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 c5.c
#include <stdio.h>#include <stdlib.h>#include <sys/socket.h>#include <unistd.h>#include <arpa/inet.h>#include <errno.h>#include <string.h>#define MAXLINE 4096#define SERV_PORT 9877void client(FILE *fp,int sockfd){ char buf[MAXLINE]; int n; int fd = fileno(fp); while (1) { if ((n = read(STDIN_FILENO,buf,MAXLINE)) < 0) { printf("read %s\n",strerror(errno)); exit(1); } if (write(sockfd,buf,n) != n) { printf("write %s\n",strerror(errno)); exit(1); } if ((n = read(sockfd,buf,MAXLINE)) < 0) { printf("read %s\n",strerror(errno)); exit(1); } if (write(fd,buf,n) != n) { printf("read %s\n",strerror(errno)); exit(1); } }}int main(int argc,char** argv){ if (argc != 2) { printf("add <ipadress\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); } if (connect(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr)) < 0) { printf("connect: %s\n",strerror(errno)); exit(1); } client(stdout,sockfd); return 0;}
第二次键入时,服务器端进程已经终止
阅读全文
1 0
- 一个基于UDP的回显C/S(二)
- 一个简单基于UDP的回显C/S(一)
- 基于UDP的C/S多播回射服务器
- windwos平台下C++实现一个基于UDP的C/S模式通信示例
- [C语言]基于UDP的基本C/S模型
- 基于UDP的 C/S模式 网络应用程序
- 一个简单的UDP广播例子(含C/S)
- 一个简单的UDP广播例子(含C/S)
- 一个简单的UDP广播例子(含C/S)
- C 基于UDP实现一个简易的聊天室
- DeviceAnywhere,基于UDP协议的手机计算机C/S结构软件, 附源码
- Linux下基于UDP协议的C/S通信编程笔记
- socket编程 -- 基于UDP协议的C/S通信模型及实现
- 基于UDP的C/S网络编程模型(使用sendto和recvfrom函数)
- 一个简单的基于UDP字符界面的聊天应用程序(C/C++)
- 基于UDP 的QQ聊天程序 二
- 一个基于UDP的聊天应用程序---C#
- 一个基于UDP的可靠数据传输库
- TensorFlow学习 -2
- QPSK 调制与解调(Matlab仿真)
- C#实现对图片文件的压缩、裁剪操作实例
- 斐讯K2路由器刷固件实现校园网可使用
- mysql navicat编码保持一致不乱码
- 一个基于UDP的回显C/S(二)
- GSON的坑
- 用原生HTML5控件实现输入框自动提示(下拉列表)
- 精华文章——Web 研发模式演变
- IP及端口号的获取及保存【实用】
- Ef中去重
- java集合框架-ArrayList
- 配置win32控制台输出文本属性
- JPush Android 推送如何区分开发、生产环境