zoukankan      html  css  js  c++  java
  • 套接字网络编程学习笔记

    1.发送方需要调用htons()或htonl()对发送的数据转序,接收方在从套接字缓冲区中读取数据之后,要调用ntohs()函数或ntohl()对接收到的数据进行转序,字符型数据除外,因为字符占一个字节,字节序指的是多字节数据的存储或发送顺序。

    2.tcp程序的端口号与udp程序的端口号是独立的,比如100号端口可以同时被一个udp程序和tcp程序使用,但两个udp程序不能同时使用一个端口号,tcp也是如此

    3.编写自己的头文件,包括导入库文件,制作包裹函数

    4.包裹函数:调用一个函数之后要通过其返回值查看函数调用是否成功,若没有成功则调用err_sys()函数输出错误原因

    5.全局变量error:系统定义的全局变量,当调用函数出错时,系统将错误类型宏复制给err

    6.每个tcp套接字都有一个发送缓冲区,udp套接字没有发送缓冲区,tcp套接字之所以有发送缓冲区是为了实现可靠传输,对tcp阻塞套接字调用write时,若发送缓冲区的大小小于写入量,write会阻塞,直到数据分批写入完才返回,write成功返回只能说明已把数据成功写入套接字缓冲区,不代表对方成功接收到数据,可以改变套接字缓冲区大小

    7.套接字地址结构

    ipv4套接字地址结构:struct sockaddr_in ,常用成员变量sin_family,sin_port,sin_addr

    端口号以网络字节序形式存储,ip地址以二进制网络字节序存储

    当以套接字地址结构做为函数参数时,需要进行强制类型转换,将各种协议族的套接字地址结构都强制转换成通用套接字地址结构struct sockaddr

    8.对tcp套接字调用read与write

    tcp套接字有输入输出缓冲区,缓冲区的大小是一定的

    当调用write时:对于阻塞式tcp套接字,write会在将数据全部写入输出缓冲区后返回

    对于非阻塞式tcp套接字,write会立即返回,写入量与输出缓冲区剩余空间大小有关,这就要求再次调用write,直到把数据都写入到输出缓冲区

    当调用read时:

  • 相关阅读:
    7种思维
    微服务架构
    最近面试被问到一个问题,AtomicInteger如何保证线程安全?
    Socket netty ...
    Spring-Boot配置文件web性能(服务器)配置项
    P2P互联网金融企业的四大转型方向
    分布式,微服务 区别联系 理解.
    几个好问题
    netty
    结构化思维
  • 原文地址:https://www.cnblogs.com/adelep/p/6062467.html
Copyright © 2011-2022 走看看