首先,可以将代码复制下来放到U盘里,然后挂载到Linux上

挂载步骤

找到设备->USB->你U盘的名字

挂载成功

访问U盘把代码拷贝到home文件夹下,就可以直接进行编译。

client.c

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <strings.h>
  4. #include<string.h>
  5. #include <sys/types.h>
  6. #include <sys/socket.h>
  7. #include <stdlib.h>
  8. #include <netinet/in.h>
  9. #include <netdb.h>
  10.  
  11. #define PORT 1234
  12. #define MAXDATASIZE 100
  13.  
  14. char receiveM[];
  15. char sendM[];
  16.  
  17. int main(int argc, char *argv[])
  18. {
  19. int fd, numbytes;
  20. struct hostent *he;
  21. struct sockaddr_in server;
  22.  
  23. //检查用户输入,如果用户输入不正确,提示用户正确的输入方法
  24. if (argc !=) { printf("Usage: %s <IP Address>\n",argv[]);
  25. exit();
  26. }
  27.  
  28. // 通过函数 gethostbyname()获得字符串形式的ip地址,并赋给he
  29. if ((he=gethostbyname(argv[]))==NULL){
  30. printf("gethostbyname() error\n");
  31. exit();
  32. }
  33.  
  34. // 产生套接字fd
  35. if ((fd=socket(AF_INET, SOCK_STREAM, ))==-){
  36. printf("socket() error\n");
  37. exit();
  38. }
  39.  
  40. bzero(&server,sizeof(server));
  41.  
  42. server.sin_family = AF_INET;
  43. server.sin_port = htons(PORT);
  44. server.sin_addr = *((struct in_addr *)he->h_addr);
  45. if(connect(fd, (struct sockaddr *)&server,sizeof(struct sockaddr))==-){
  46. printf("connect() error\n");
  47. exit();
  48. }
  49.  
  50. // 向服务器发送数据
  51.  
  52. printf("send message to server:");
  53.  
  54. fgets(sendM,,stdin);
  55. int send_le;
  56. send_le=strlen(sendM);
  57. sendM[send_le-]='\0';
  58.  
  59. send(fd,sendM,strlen(sendM),);
  60.  
  61. // 从服务器接收数据
  62. if ((numbytes=recv(fd,receiveM,MAXDATASIZE,)) == -){
  63. printf("recv() error\n");
  64. exit();
  65. }
  66.  
  67. printf("receive message from server:%s\n",receiveM);
  68.  
  69. close(fd);
  70.  
  71. }

server.c

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <strings.h>
  4. #include <stdlib.h>
  5. #include <unistd.h>
  6. #include <sys/types.h>
  7. #include <sys/socket.h>
  8. #include <netinet/in.h>
  9. #include <arpa/inet.h>
  10. #include<pthread.h>
  11. #define PORT 1234
  12. #define BACKLOG 1
  13.  
  14. void *start_routine( void *ptr)
  15. {
  16. int fd = *(int *)ptr;
  17. char buf[];
  18. int numbytes;
  19. int i,c=;
  20. printf("this is a new thread,you got connected\n");
  21. printf("fd=%d\n",fd);
  22.  
  23. if ((numbytes=recv(fd,buf,,)) == -){
  24. printf("recv() error\n");
  25. exit();
  26. }
  27.  
  28. char str[numbytes];
  29. char buffer[numbytes];
  30.  
  31. //将收到的字符串反转
  32. for(c=;c<(numbytes-);c++)
  33. {
  34. buffer[c]=buf[c];
  35. }
  36.  
  37. printf("receive message:%s\n",buf);
  38.  
  39. printf("numbytes=%d\n",numbytes);
  40.  
  41. for(i=;i<numbytes;i++)
  42. {
  43. str[i]=buf[numbytes--i];
  44.  
  45. }
  46.  
  47. printf("server will send:%s\n",str);
  48. numbytes=send(fd,str,sizeof(str),);
  49. printf("send numbytes=%d\n",numbytes);
  50. close(fd);
  51. }
  52.  
  53. int main()
  54. {
  55.  
  56. int listenfd, connectfd;
  57. struct sockaddr_in server;
  58. struct sockaddr_in client;
  59. int sin_size;
  60. sin_size=sizeof(struct sockaddr_in);
  61.  
  62. pthread_t thread; //定义一个线程号
  63.  
  64. if ((listenfd = socket(AF_INET, SOCK_STREAM, )) == -)
  65. {
  66. perror("Creating socket failed.");
  67. exit();
  68. }
  69.  
  70. int opt = SO_REUSEADDR;
  71. setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
  72.  
  73. bzero(&server,sizeof(server));
  74.  
  75. server.sin_family=AF_INET;
  76. server.sin_port=htons(PORT);
  77. server.sin_addr.s_addr = htonl (INADDR_ANY);
  78.  
  79. // 绑定
  80. if (bind(listenfd, (struct sockaddr *)&server, sizeof(struct sockaddr)) == -) {
  81. perror("Bind error.");
  82. exit();
  83. }
  84.  
  85. // 监听
  86. if(listen(listenfd,BACKLOG) == -){ /* calls listen() */
  87. perror("listen() error\n");
  88. exit();
  89. }
  90.  
  91. while()
  92. {
  93. // accept
  94. if ((connectfd = accept(listenfd,(struct sockaddr *)&client,&sin_size))==-) {
  95. perror("accept() error\n");
  96. exit();
  97. }
  98.  
  99. printf("You got a connection from %s\n",inet_ntoa(client.sin_addr) );
  100.  
  101. pthread_create(&thread,NULL,start_routine,(void *)&connectfd);
  102.  
  103. }
  104. close(listenfd);
  105.  
  106. }

代码从U盘复制到home后,编译执行

打开三个中端

可以发现用户端和服务器端连接成功,即用户端发送的信息,服务器端可以接收的到。

Linux下实现客户端和服务器端的通信的更多相关文章

  1. Linux 下 简单客户端服务器通讯模型(TCP)

    原文:Linux 下 简单客户端服务器通讯模型(TCP) 服务器端:server.c #include<stdio.h> #include<stdlib.h> #include ...

  2. Linux下librdkafka客户端的编译运行

    Linux下librdkafka客户端的编译运行 librdkafka是一个开源的Kafka客户端C/C++实现,提供了Kafka生产者.消费者接口. 由于项目需要,我要将Kafka生产者接口封装起来 ...

  3. linux下MongoDB客户端shell基本操作

    MongoDB 是一款NoSql数据库,没有固定的模式,即同一个集合中的不同文档结构可以不同,如:第一条记录{name:”xiaoming”},第二条记录:{name:”xiaoli”,age:15} ...

  4. (转)Linux下 SVN客户端安装

    原地址:http://rtxbc.iteye.com/blog/860092 今天有现场程序连svn服务器一直有异常,于是在现场linux下安装svn client来直接测试,看问题原因: 一:安装s ...

  5. Linux下PHP与普通C程序通信

    Linux下的普通C程序之前可以使用FIFO(有名管道来进行进程间通信,因为这个管道以一个文件的形式存在于文件系统上,因此只要能读写这个文件就可以实现进程间通信. 首先使用mkfifo命令有文件系统上 ...

  6. Linux下onvif客户端获取ipc摄像头 GetServices:获取媒体地址(有的h265摄像头必须要这个接口)

    GetServices:获取媒体地址(有些h265的摄像头必须用到这个接口,得到获取能力时没获取到的另一个媒体地址) 鉴权:但是在使用这个接口之前是需要鉴权的.ONVIF协议规定,部分接口需要鉴权,部 ...

  7. Linux下onvif客户端关于ipc摄像头的搜索

    设备搜索:要访问一个IPC摄像头,或者说要调用IPC摄像头提供的WEB服务接口,就要先知道其IP地址,这就是设备发现的过程,或者叫设备搜索的过程.IPC摄像头用的是239.255.255.250(端口 ...

  8. Linux下onvif客户端获取h265 IPC摄像头的RTSP地址

    1. 设备搜索,去获取webserver 的地址 ,目的是在获取能力提供服务地址,demo:https://www.cnblogs.com/croxd/p/10683429.html 2. GetCa ...

  9. Linux下onvif客户端获取ipc摄像头 GetStreamUri:rtsp地址(h264、h265)

    GetStreamUri:rtsp地址 鉴权:但是在使用这个接口之前是需要鉴权的.ONVIF协议规定,部分接口需要鉴权,部分接口不需要鉴权,在调用需要鉴权的接口时不使用鉴权,会导致接口调用失败.实现鉴 ...

随机推荐

  1. Nmap参考指南中文版

    Nmap参考指南中文版 来源: http://www.nmap.com.cn/doc/manual.shtm 译注 该Nmap参考指南中文版由Fei Yang <fyang1024@gmail. ...

  2. 循环冗余校验(CRC)

    冗余码 CRC和海明校验类似,也是有效信息(k位)+校验信息(r位),需要满足N=k+r≤2r-1 生成多项式G(X) 定义:收发双方约定的一个(r+1)位二进制数,发送方利用G(X)对信息多项式做模 ...

  3. html标签的target属性应用

    1. 定义和用法 target 属性规定在何处打开页面上的所有链接. <head> <base target="_blank" /> </head&g ...

  4. SpringBoot 快速支持国际化i18n

    学习目标 快速学会如何在工程中支持国际化语言. 快速查阅 专题阅读:<SpringBoot 布道系列> 源码下载:springboot-locale-i18n — Hey Man,Don' ...

  5. sd卡无法启动及zc706更改主频后可以进入uboot无法启动kernel的坑

    好长的标题 +_+ 1.sd卡无法启动 起因:kernel底下通过dd测试速度,擦写了sd卡,再启动时发现无法启动 于是重新格式化,再将BOOT.bin 相关dtb u-rootfs zImage和u ...

  6. Center os6.5 mysql

    1 # yum -y install mysql-server mysql  mysql-dev 2 启动mysql   # service mysqld start 3 为root用户配置一个密码 ...

  7. php 从7.0升级到7.2

    下面的方法安装的php是非线程安全的,apache2服务器用不了 1. 添加Ondřej Surý提供的PHP源: sudo apt-get install software-properties-c ...

  8. python基础:1.位、字节、字的关系

    1.位,简称b,或bit,比特,数据存储的最小单位.每个二进制数字0或1就是一个位(bit),网络通信常用bps,bit per second ,每秒传输多少位 2.字节,简称byte, 1byte ...

  9. 重新调整动态vhdx占用的空间

    优化vhd:https://docs.microsoft.com/en-us/powershell/module/hyper-v/optimize-vhd?view=win10-ps 1. 弹出vhd ...

  10. sql200安装问题

    解决方法: 首先把安装目录和C:\Program Files下的Microsoft SQL Server文件夹删了,删除在current_user和local_machine\software\mic ...