回射服务器即客户端发送一段数据给服务器,服务器再将这段数据原封不动的发送给客户端,原理很简单,原理图如下:

以TCP协议为例,客户端、服务器代码如下:
**

服务器:

**

#include <stdio.h>
#include <time.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
int main()
{struct sockaddr_in server_sockaddr;memset(&server_sockaddr,0,sizeof(server_sockaddr));server_sockaddr.sin_family=AF_INET;server_sockaddr.sin_port=htons(5188);server_sockaddr.sin_addr.s_addr=htonl(INADDR_ANY);//创建一个socketint sockid=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);const int on=1;//设置重复利用端口,如果不设置在频繁调试时会出现端口被占用情况,导致bind失败setsockopt(sockid,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));//bindif(bind(sockid,(struct sockaddr *)&server_sockaddr,sizeof(server_sockaddr))<0){printf("bind\n");return 0;}//listenif(listen(sockid,SOMAXCONN)<0){printf("listen\n");return 0;}//获得连接的客户端信息struct sockaddr_in client_sockaddr;socklen_t client_socklen=sizeof(client_sockaddr);//acceptint client_sock=accept(sockid,(struct sockaddr *)&client_sockaddr,&client_socklen);//打印所连接客户端ip及端口printf("ip=%s,port=%d\n",inet_ntoa(client_sockaddr.sin_addr),ntohs(client_sockaddr.sin_port));char receive[100]={0};int  r_size=0;while(1){//获取时间,即服务器接收数据的时间time_t timep;time(&timep);memset(receive,0,sizeof(receive));//读取数据,如果没有读到就等待,因为此时read阻塞,如果客户端关闭read立即返回0if((r_size=read(client_sock,receive,sizeof(receive)))==0){break;}fputs(ctime(&timep),stdout);fputs(receive,stdout);printf("\n");//将读取到的数据在发给客户端write(client_sock,receive,r_size);}close(client_sock);close(sockid);return 0;
}

客户端:

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main()
{struct sockaddr_in sock;memset(&sock,0,sizeof(sock));sock.sin_family=AF_INET;sock.sin_port=htons(5188);sock.sin_addr.s_addr=inet_addr("127.0.0.1");//创建一个socketint sockid=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);socklen_t socklen=sizeof(sock);//connectconnect(sockid,(struct sockaddr *)&sock,socklen);char send[100]={0};char receive[100]={0};while(1){printf("发送: ");//从标准输入获取一段数据fgets(send,sizeof(send),stdin);//将这段数据发送给服务器write(sockid,send,strlen(send));printf("接受: ");//读取来自服务器传回来的数据read(sockid,receive,sizeof(receive));fputs(receive,stdout);//将这两个数组清零memset(receive,0,strlen(receive));memset(send,0,strlen(send));}close(sockid);return 0;
}

linux——回射服务器相关推荐

  1. Linux——回射服务器多并发(多线程)

    多线程与多进程的做法区别不大,思路一样,都是执行两个死循环,一个循环等待客户端连接,一个循环与客户端通信.多进程的方式请点此处 服务器 #include <sys/socket.h> #i ...

  2. linux——回射服务器多并发(多进程)

    多并发原理如图,多个客户端连接一个服务器,无论哪个客户端发送数据给服务器,服务器都能把数据准确的返回给这个客户端. 在socket编程中,socket这种文件描述符被默认设置为阻塞,故而read函数和 ...

  3. Linux C++ 回射服务器

    http://blog.csdn.net/qq_25425023/article/details/53914820 回射服务器就是服务端将客户端的数据发送回去. 我实现的回射服务器返回增加了时间. 服 ...

  4. LIBUV学习笔记(三)libuv中pipe/tty相关操作以及一个简单的unix域回射服务器/客户端例子...

    uv_pipe_t - Pipe handle Pipe handles provide an abstraction over local domain sockets on Unix and na ...

  5. 《UNP》随笔——“实现一个简单的回射服务器”存在的不足(信号处理)

    尽管实现了一个简单的回射服务器,但依旧存在一些不足: 服务端的子进程结束的时候,由于父进程未对子进程发送的SIGCHLD信号进行处理,会导致子进程进入僵死状态.这一点该如何解决? 客户端A向服务端B发 ...

  6. 一个简单的回射服务器

    本文编写了一个初步的简单的回射服务器例子.基本内容书上都能找到,认真看书就行了,所以尽量讲一些自己认为应该注意的地方. 功能: 客户端从标准输入读入一行文本,写给服务器:服务器读入这行文本,并回射给客 ...

  7. TCP echo_server(C++)回射服务器实现以及问题记录

    TCP echo_server(C++)回射服务器实现以及问题记录 基本运行方式: 客户端接收用户输入的字符串并发送到服务器端 服务器端将接收的字符串数据传回客户端 服务器端和客户端之间的字符串回射一 ...

  8. UNIX TCP回射服务器/客户端之使用epoll模型的服务器

    程序简介:这是一个运用epoll系列函数进行IO复用的服务器模型.它是目前UNIX与LINUX平台上效率最高,最受欢迎的IO复用传输模型. 其他的不说了,直接粘贴代码吧! 服务器端: #include ...

  9. Linux非阻塞IO(八)使用epoll重新实现非阻塞的回射服务器

    2019独角兽企业重金招聘Python工程师标准>>> 本文无太多内容,主要是几个前面提到过的注意点: 一是epoll的fd需要重新装填.我们将tcp_connection_t的指针 ...

最新文章

  1. mysql dump 到的文件_mysql查询结果导出到文件
  2. 蚂蚁的难题(一) http://acm.nyist.net/JudgeOnline/status.php?pid=744
  3. c++中函数模板的显示具体化
  4. linux xps 13 wifi,XPS13-9350安装linux以及网卡连接失败修复的临时方案
  5. C专家编程—分析signal函数的原型声明{void (*signal(int sig,void (*func)(int)))(int)}(2)
  6. 漂亮表格的CSS定义
  7. oncontextmenu事件
  8. 【渝粤题库】国家开放大学2021春1032成本管理题目
  9. 框架controller找不到_SpingBoot框架知识详解
  10. turtle生成二叉树
  11. 马云不要当首富;ofo 否认裁员;苹果剔除 iPhone Xs Max 组件 | 极客头条
  12. java多线程 线程安全_Java中的线程安全
  13. Shell之date用法
  14. radius mysql md5_radius协议采用什么传输 radius协议中md5加密函数的参数怎么处理
  15. 实战手游新手流程:细节、反馈、体验
  16. HP打印机M329dw纸盘关闭卡、涩问题解决
  17. SparkML -- LightGBM On Spark
  18. Html5学习------canvas绘制径向渐变图形
  19. 工业网关下工业自动化设备远程监控解决方案
  20. Hibernate中SessionFactory配置

热门文章

  1. MIP 组件库升级公告
  2. 五个案例简述Web设计原则:通用一致
  3. UVA - 1368 ​​​​​​​DNA Consensus String
  4. UVA - 455 Periodic Strings【字符串】
  5. 阿特斯携手EDF启动建设巴西191.5MW光伏项目
  6. SLF4J with Logback in a Maven Project | Mograblog
  7. 第四次作业 孙保平034 李路平029
  8. http://www.easyui.info/archives/396.html
  9. netapp存储常用命令
  10. AS3自制按钮通用代码