udp协议下的socket函数

目录

1.网络协议

2.网络字节序

3.socket编译接口

4.sockaddr结构体

5.模拟实现

1.socket函数

2.bind函数(绑定)

1.讲解

1.如何快速的将 整数ip<->字符串

2.ip地址的注意事项

3.端口号的注意事项

3.recvfrom函数

4.sendto函数

5.代码呈现

6.运行结果

7.开放UDP端口

8.更加体验这个udp的网络协议


建议不懂网络基础知识的先看一下这篇:网络基础知识-CSDN博客

1.网络协议

1.认识TCP协议

(1)传输层协议(2)有连接(3)可靠传输(4)面向字节流

2.认识UDP协议

(1)传输层协议(2)无连接(3)不可靠传输(4)面向数据报

3.注意

上面的有无连接,就是传输层和应用层是否建立连接,TCP连接就是客服端要想服务器发起申请链接,然后才能发送,但是UDP不管你。注意,两个没有好坏之分,都是褒义词,就像金属属性有惰性程度。简历链接的成本也是很大的!

2.网络字节序

我们刚开始学习C语言时,不知道你们有没有了解过大小端存储,没有的可以了解一下。但是网络协议出现的肯定是比大小端出现的晚,并且但是大小端当时没有谁有明显的优势,所以也不好替代谁,那么在网络传输时就出现问题了。所以TCP/IP协议规定,网络数据流一律采用大端字节序,即低地址高字节。

当然C语言肯定会提供接口的,不需要我们自己传唤。

3.socket编译接口

这个先了解一下,具体的下面会说。

4.sockaddr结构体

注意上面函数有一个结构体sockaddr的,其实它是有三个结构体:

对应的套接字编程的种类:1.原始套接字编程--网络工具(一般是跳过传输层进行编译)2.网络套接字编程--用户间的网络通信3.域间套接字--同一个机器内。

但是为什么上面函数只用一个sockaddr,就是想将网络接口统一抽象化,因此传输类型必须是一样的。其实判断也是很简单的:

5.模拟实现

1.socket函数

domain就是上面sockaddr结构体的AF_INIT和AF_UNIX,type就是选择的upd协议:

返回值,如果失败返回-1:

2.bind函数(绑定)

1.讲解

sockfd就是socket的返回值大小,addr则是绑定的ip地址,端口号等等信息,addrlen就是sizeof(addr)就好了。

当然最重要就是初始化addr:

先看看该类型的成员吧:

1.如何快速的将 整数ip<->字符串

就是将四个值都存储下来,注意将字符串转ip时,这样用一下引用,就会很简便的求出uint32_t ip了。ip转字符串就正常来就好了。

2.ip地址的注意事项

假设我们绑定当前账户的ip地址,会出现什么情况呢?

首先:虚拟机中代码是可以运行的,但是云服务是禁止直接bind公网IP,因为什么呢?因为一台主机的ip地址可能不止一个,可能是多个,但是你但凡绑定后,别人法另一个ip地址,你就接受不到了!所以一般默认是"0.0.0.0"。

3.端口号的注意事项

后面输入的是绑定的端口号

[0,1023]是系统内定的端口号,一般都要有固定的应用层协议使用,http:80,https:443,  mysql:2206(特殊的)。所以一般设置大于1023的端口号!

可以通过netstate -naup来查看自己设定的ip和端口号。

3.recvfrom函数

作用:接受别人发送来的数据。

buf就是接受别人发来数据的缓冲区,len就是buffer的长度,flags默认为0就好了,下面两个就是接受方要知道是谁发来的数据,到时候好发送回给对方。

4.sendto函数

作用:发送给别人的函数

参数和上面的没什么区别了。

5.代码呈现

Makefile:

main.cc

UdpServer.hpp

UdpClient.cc

log.hpp

Linux命名管道-CSDN博客

我在这上面写过。

6.运行结果

7.开放UDP端口

一般人运行上面程序是不会成功的,因为我们没有开放端口号,所以链接不到主机上。

解决一:
在买的云服务器的安全组里开:

解决二:
由于我在xshell上面修改了tcp的端口,所以再在华为云上修改udp导致web无法同步到上面,所以只能在linux上直接改防火墙:

8.更加体验这个udp的网络协议

很多人感觉这个进程间通讯没什么区别,那么可以让你们体验一下网络间通讯:

将这个压缩到桌面上,发给你的好朋友。

相关推荐

  1. Unity中Socket,Tcp,Udp网络连接协议总结

    2024-06-15 00:44:03       13 阅读
  2. 基于TCP协议socket通信过程

    2024-06-15 00:44:03       30 阅读
  3. Socket.D 协议开发缘由

    2024-06-15 00:44:03       25 阅读
  4. unity socket udp 连接

    2024-06-15 00:44:03       32 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-15 00:44:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-15 00:44:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-15 00:44:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-15 00:44:03       18 阅读

热门阅读

  1. PHP异常处理的最佳实践及常见问题解决

    2024-06-15 00:44:03       11 阅读
  2. Set up an Ethereum node on your Raspberry Pi using IPv6

    2024-06-15 00:44:03       8 阅读
  3. HCIP认证笔记(判断题)

    2024-06-15 00:44:03       4 阅读
  4. 2024.6.12总结

    2024-06-15 00:44:03       10 阅读
  5. 编程前端看什么书比较好:深入解析与推荐

    2024-06-15 00:44:03       7 阅读
  6. 深入解析 Unix I/O 的五种模型

    2024-06-15 00:44:03       9 阅读
  7. mysql-线上常用运维sql-2

    2024-06-15 00:44:03       9 阅读