网络编程day2——基于TCP/IP协议的网络通信

这篇具有很好参考价值的文章主要介绍了网络编程day2——基于TCP/IP协议的网络通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

TCP网络通信编程模型:

        计算机S                                                 计算机C

     创建socket对象                                   创建socket对象

     准备通信地址(自己的ip(非公网ip))      准备通信地址

                                    (计算机S的,与C在同一个局域网,或者S是公网ip)

      绑定sokect对象和地址                          ...

       监听                                                      ...

      等待连接                                              连接

      接收\发送数据                                     发送\接收数据

      关闭socket                                          关闭socket

    本地字节序(小端)与网络字节序(大端)的转换:

    #include <arpa/inet.h>

    uint32_t htonl(uint32_t hostlong);

    功能:把4字节的本地字节序转化成网络字节序

    uint16_t htons(uint16_t hostshort);    //本地是小端  网路通信是大端

    功能:把2字节的本地字节序转化成网络字节序 //h:home 本地  to  n:net  网络   s:short 端口号是2个字节大端数据

    uint32_t ntohl(uint32_t netlong);

    功能:把4字节的网络字节序转化成本地字节序

    uint16_t ntohs(uint16_t netshort);

    功能:把2字节的网络字节序转化成本地字节序

    //  网络通信时使用

    #include <netinet/in.h>

    struct sockaddr_in {

    __kernel_sa_family_t  sin_family; //

    __be16        sin_port;   // 端口号 需要大端数据

    struct in_addr    sin_addr;   // IP地址结构体

    };

    struct in_addr {

        __be32  s_addr;     //  IP地址数据 大端整数

    };

    点分十进制字符串的ip地址转换成小端整数、然后还需要转大端:

    "192.168.0.1"  (192<24)|(168<16)|(0<8)|(1)

    11000000 00000000 00000000 00000000     (192<24)

                     10101000 00000000 00000000     (168<16)

                                      00000000 00000000     (0<8)

                                                                      1     (1)

     11000000 10101000 00000000 00000001

    ip地址与整数的转换:

    in_addr_t inet_addr(const char *cp);

    功能:把字符串形式的点分十进制的ip地址转换成大端的整数形式的ip地址

    char *inet_ntoa(struct in_addr in);

    功能:把大端的ip整数转换成字符串形式的点分十进制的ip地址

UDP网络通信编程模型:

        计算机S                                  计算机C

     创建socket                              创建socket

     准备通信地址(自己的)             准备通信地址(S的地址)

     绑定socket和通信地址              ...

     接收\发送数据                          发送\接收数据  

     关闭socket                              关闭socket

UDP的数据发送函数

  ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, 
    const struct sockaddr *dest_addr, socklen_t addrlen);  

    功能:UDP专用的数据发送

    sockfd:socket描述符

    buf:待发送的数据内存首地址

    len:要发送的字节数

    flags:一般写0阻塞发送即可  

    dest_addr:发送目标的地址结构体

    addrlen:地址结构体的字节数

    返回值:成功发送的字节数,-1出现错误

 UDP数据接收函数

  ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
    struct sockaddr *src_addr, socklen_t *addrlen);

    功能:UDP专用的数据接收函数

    sockfd:socket描述符

    buf:存储接收的数据内存首地址

    len:buf的大小

    flags:一般写0阻塞接收即可

    src_addr:获取发送者的地址  //输出型参数 需要准备一个结构体接

    addrlen:先要输入才能输出发送者的地址

    返回值:成功接收到的字节数 -1出现错误  0表示关闭通信

两者的区别:

1、TCP是面向连接的,UDP是面向无连接的;

2、UDP程序结构较简单;

3、TCP是面向字节流的,UDP是基于数据报的;

4、TCP保证数据正确性,UDP可能丢包;

5、TCP保证数据顺序,UDP不保证。  文章来源地址https://www.toymoban.com/news/detail-684991.html

到了这里,关于网络编程day2——基于TCP/IP协议的网络通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 网络编程——深入理解TCP/IP协议——OSI模型和TCP/IP模型:构建网络通信的基石

    TCP/IP协议,即 传输控制协议/互联网协议 ,是一组用于在计算机网络中实现通信的协议。它由两个主要的协议组成:TCP(传输控制协议)和IP(互联网协议)。TCP负责确保数据的可靠传输,而IP则负责路由数据包以在网络中传递。TCP/IP协议簇还包含其他辅助协议,如UDP(用户数

    2024年02月14日
    浏览(21)
  • 网络编程day2

    TCP的基本通信 服务器端 客户端 实现机械臂控制

    2024年01月18日
    浏览(37)
  • Linux 网络编程学习笔记——一、TCP/IP 协议族

    数据链路层实现了网卡接口的网络驱动程序,以处理数据在物理媒介(以太网、令牌环等)上的传输,不同的物理网络具有不同的电气特性,网络驱动程序隐藏了这些细节,为上层协议提供一个统一的接口。最常用的协议是 ARP(Address Resolve Protocol,地址解析协议)和 RARP(

    2024年02月02日
    浏览(49)
  • 【Java网络编程】OSI七层网络模型与TCP/IP协议簇

    1.1、OSI七层网络模型 OSI七层网络模型中,每层的功能如下: 应用层:人与计算机网络交互的窗口。 表示层:负责数据格式的封装,如加密、压缩、编解码等。 会话层:建立、终止、管理不同端间的会话连接。 传输层:提供端到端(两台机器)之间的传输机制,以及提供流

    2024年04月11日
    浏览(19)
  • Java网络编程之IP,端口号,通信协议(UDP,TCP)

    ① C/S :客户端/服务器 在用户本地需要下载安装客户端程序,在远程有一个服务器端程序。 优点:画面精美,用户体验好 缺点:用户需要下载更新 ② B/S :浏览器/服务器 只需要一个浏览器,用户通过指定网址访问对应的服务器。 优点:不需要开发客户端,只需要页面+服务

    2024年02月03日
    浏览(35)
  • 【Java EE初阶十五】网络编程TCP/IP协议(二)

            tcp的socket api和U大片的socket api差异很大,但是和前面所讲的文件操作很密切的联系         下面主要讲解两个关键的类:         1、ServerSocket:给服务器使用的类,使用这个类来绑定端口号         2、Socket:即会给服务器使用,又会给客户端使用;         

    2024年02月20日
    浏览(23)
  • TCP/IP网络编程(二) 套接字协议及其数据传输特性

    关于协议 如果相隔比较远的两人进行通话,必须先决定通话方式,如果一方选择电话,另一方也必须选择电话,否则接受不到消息。 总之,协议就是为了完成数据交换而定好的约定。 创建套接字 协议族 通过socket函数的第一个参数传递套接字中使用的协议分类信息,此协议

    2024年02月10日
    浏览(29)
  • 【Java】--网络编程:基于TCP协议的网络通信

    TCP协议(Transmission Control Protocol),即传输控制协议,是一种 面向连接 的, 可靠 的,基于 字节流 的传输层通信协议。数据大小无限制。 建立连接的过程需要 三次握手 。 断开连接的过程需要 四次挥手 。 使用TCP协议的通信双方分别为 客户端 和 服务器端 。 客户端负责向服务

    2024年01月23日
    浏览(29)
  • 网络编程——基于TCP协议的通讯录【课程设计】

    题目:基于TCP协议的通讯录 设计目标: (1)了解Socket通信的原理,在此基础上编写一个基于TCP协议的通讯录; (2)理解TCP通信原理; 课程设计系统组成及模块功能: 此TCP/IP课程设计实现了基于TCP的客户/服务器通信程序,需要实现以下一些基本功能: (1)客户端连接服务

    2024年02月06日
    浏览(39)
  • 《TCP/IP网络编程》--基于TCP实现字符串对话和文件传输

    主要需求:         服务器端和客户端各传递 1 次字符串,基于 TCP 协议,传递字符串前先以 4 字节整数型方式传递字符串长度,剩余部分为字符串数据; 注:下面的代码基于 Windows 系统实现; 项目链接:Chapter5

    2024年02月09日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包