单客户端和服务端的通信(基于UDP)   代码

服务端代码socket3.c

  1. #include<sys/types.h>
  2. #include<sys/socket.h>
  3. #include<netinet/in.h>
  4. #include<arpa/inet.h>
  5. #include<unistd.h>
  6. #include<stdlib.h>
  7. #include<stdio.h>
  8. #include<string.h>
  9. #include<netdb.h>
  10. #include<errno.h>
  11. #define PORT 8888
  12. #define MAX_MSG_SIZE 1024
  13. int main(void)
  14. {
  15. int sockfd, addrlen, n;
  16. struct sockaddr_in addr;
  17. char msg[MAX_MSG_SIZE];
  18. sockfd = socket(AF_INET, SOCK_DGRAM, 0);
  19. if (sockfd < 0)
  20. {
  21. fprintf(stderr, "socket failed\n");
  22. exit(EXIT_FAILURE);
  23. }
  24. addrlen = sizeof(struct sockaddr_in);
  25. bzero(&addr, addrlen);
  26. addr.sin_family = AF_INET;
  27. addr.sin_addr.s_addr = htonl(INADDR_ANY);
  28. addr.sin_port = htons(PORT);
  29. if (bind(sockfd, (struct sockaddr*)(&addr), addrlen) < 0)
  30. {
  31. fprintf(stderr, "bind fail\n");
  32. exit(EXIT_FAILURE);
  33. }
  34. puts("bind success");
  35. while (1)
  36. {
  37. bzero(msg, MAX_MSG_SIZE);
  38. n = recvfrom(sockfd, msg, sizeof(msg), 0, (struct sockaddr *)(&addr), &addrlen);
  39. fprintf(stdout, "Recevie message from client is %s\n", msg);
  40. fgets(msg, MAX_MSG_SIZE,stdin);
  41. printf("Server endpoint input message %s\n", msg);
  42. sendto(sockfd, msg, n, 0,(struct sockaddr *)(&addr), addrlen);
  43. }
  44. close(sockfd);
  45. exit(EXIT_SUCCESS);
  46. }

客户端代码socket4.c

  1. #include<stdio.h>
  2. #include<unistd.h>
  3. #include<stdlib.h>
  4. #include<sys/types.h>
  5. #include<sys/socket.h>
  6. #include<netinet/in.h>
  7. #include<string.h>
  8. #define MAX_BUF_SIZE 1024
  9. #define PORT 8888
  10. int main()
  11. {
  12. int sockfd, addrlen, n;
  13. char buffer[MAX_BUF_SIZE];
  14. struct sockaddr_in addr;
  15. sockfd = socket(AF_INET, SOCK_DGRAM, 0);
  16. if (sockfd < 0)
  17. {
  18. fprintf(stderr, "socket falied\n");
  19. exit(EXIT_FAILURE);
  20. }
  21. addrlen = sizeof(struct sockaddr_in);
  22. bzero(&addr, addrlen);
  23. addr.sin_family = AF_INET;
  24. addr.sin_port = htons(PORT);
  25. addr.sin_addr.s_addr = htonl(INADDR_ANY);
  26. puts("socket success");
  27. while(1)
  28. {
  29. bzero(buffer, MAX_BUF_SIZE);
  30. fgets(buffer, MAX_BUF_SIZE, stdin);
  31. sendto(sockfd, buffer, strlen(buffer), 0, (struct sockaddr *)(&addr), addrlen);
  32. printf("client send msg is %s\n", buffer);
  33. n = recvfrom(sockfd, buffer, strlen(buffer), 0, (struct sockaddr *)(&addr), &addrlen);
  34. fprintf(stdout, "clinet Receive message from server is %s\n", buffer);
  35. }
  36. close(sockfd);
  37. exit(0);
  38. return 0;
  39. }

  运行结果截图如下:

5、总结

服务端:socket->bind->(sendto 、revcfrom)

客户端:socket->(sendto 、revcfrom)

upd不是面相连接的,这个是和tcp本质区别,数据可能会乱序,重复。

linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)的更多相关文章

  1. linux网络编程之shutdown() 与 close()函数详解

    linux网络编程之shutdown() 与 close()函数详解 参考TCPIP网络编程和UNP: shutdown函数不能关闭套接字,只能关闭输入和输出流,然后发送EOF,假设套接字为A,那么这 ...

  2. 用PHP的socket实现客户端到服务端的通信

    服务端 <?php error_reporting(E_ALL); set_time_limit(0); ob_implicit_flush(); //本地IP $address = 'loca ...

  3. linux网络编程之socket编程(十五)

    今天继续学习socket编程,这次主要是学习UNIX域协议相关的知识,下面开始: [有个大概的认识,它是来干嘛的] ①.UNIX域套接字与TCP套接字相比较,在同一台主机的传输速度前者是后者的两倍. ...

  4. linux网络编程之socket编程(三)

    今天继续对socket编程进行学习,在学习之前,需要回顾一下上一篇中编写的回射客户/服务器程序(http://www.cnblogs.com/webor2006/p/3923254.html),因为今 ...

  5. linux网络编程之socket编程(七)

    今天继续学习socket编程,北京在持续几天的雾霾天之后久违的太阳终于出来了,心情也特别特别的好,于是乎,在这美好的夜晚,该干点啥事吧,那当然就是继续坚持我的程序学习喽,闲话不多说,进入正题: 通过这 ...

  6. linux网络编程之socket编程(十三)

    今天继续学习socket编程,从今天起开始学习UDP,具体内容如下: ①.无连接 UDP协议它内部并没有维护端到端的一些连接状态,这跟TCP是不同的,TCP是基于连接的,而在连接的时候是需要进行三次握 ...

  7. linux网络编程之socket编程(二)

    今天继续对socket编程进行研究,这里会真正开如用socket写一个小例子,进入正题: TCP客户/服务器模型:   关于这个模型的流程这里就不多说了,比较容易理解,下面则利用这种模型来编写一个实际 ...

  8. 网络编程4 网络编程之FTP上传简单示例&socketserver介绍&验证合法性连接

    今日大纲: 1.FTP上传简单示例(详细代码) 2.socketserver简单示例&源码介绍 3.验证合法性连接//[秘钥加密(urandom,sendall)(注意:中文的!不能用)] 内 ...

  9. linux网络编程之socket编程(六)

    经过一个国庆长假,又有一段时间没有写博文了,今天继续对linux网络编程进行学习,如今的北京又全面进入雾霾天气了,让我突然想到了一句名句:“真爱生活,珍惜生命”,好了,言归正传. 回顾一下我们之间实现 ...

随机推荐

  1. Laravel本地环境搭建:Homestead开发环境的部署

    Laravel框架在php开发过程是不断进行优化的,当然也包括了本地环境的开发,下面我们就来具体看看laravel框架中的Homestead 开发环境的部署内容. 首先白以下几个概念 VirtualB ...

  2. Deep Learning专栏--强化学习之MDP、Bellman方程(1)

    本文主要介绍强化学习的一些基本概念:包括MDP.Bellman方程等, 并且讲述了如何从 MDP 过渡到 Reinforcement Learning. 1. 强化学习基本概念 这里还是放上David ...

  3. Java设计模式原型模式

    原型模式: – 通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式. – 就是java中的克隆技术,以某个对象为原型,复制出新的对象.显然,新的对象具备原型对象的特点 – 优势 ...

  4. WPF绑定(Binding)(4)

    什么是绑定(Binding)? 在winform中, 我们常常会用到各种类型的赋值, 例如: button1.Text="Hello"; label.Text="Hell ...

  5. 面试官:“谈谈Spring中都用到了那些设计模式?”。

    我自己总结的Java学习的系统知识点以及面试问题,已经开源,目前已经 41k+ Star.会一直完善下去,欢迎建议和指导,同时也欢迎Star: https://github.com/Snailclim ...

  6. linux防火墙和SELinux

    1. 关闭防火墙 永久性生效 开启:chkconfig iptables on 关闭:chkconfig iptables off 即时生效 开启:service iptables start 关闭: ...

  7. 面试官问我,为什么老司机建议MySQL列属性尽量用 NOT NULL ?

    本文阅读时间大约6分钟. 其实写这篇文章,也是来自一个知识星球读者的提问,他在二面的过程中被问到了,由于他简历中写道有 MySQL 调优经验,但这个问题没有回答好,二面被刷了. 其实我们刚学习 C 语 ...

  8. Node.js官方文档:到底什么是阻塞(Blocking)与非阻塞(Non-Blocking)?

    译者按: Node.js文档阅读系列之一. 原文: Overview of Blocking vs Non-Blocking 译者: Fundebug 为了保证可读性,本文采用意译而非直译. 这篇博客 ...

  9. Mysql-5.5版本搭建实例的部分库的从库

    由于业务需要在Mysql实例中创建部分库的从库,已有的Mysql实例的版本是mysql-5.5.49,是一个非常老的版本. 本文档涉及到服务器中运行多实例和构建实例中部分库的从库. 服务器 mysql ...

  10. Django extend(继承)模板标签

    在 views.py 上修改 ... def ordered(req): return render(req, "ordered.html") def shopping_car(r ...