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时:

  • 相关阅读:
    Mysql安装
    mysql 密码过期
    svn 合并分支
    idea 分支主干管理
    linux删除数据恢复,extundelete
    linux 转换文件编码
    sina 接口 根据ip获取各个国家和地区
    SQL中char、varchar、nvarchar的区别
    C#中virtual和abstract区别,举例子
    父类和子类的关系、代码例子
  • 原文地址:https://www.cnblogs.com/adelep/p/6062467.html
Copyright © 2011-2022 走看看