《TCP IP网络编程》尹圣雨——读书小记

本书详细介绍了TCP/IP网络编程,包括套接字类型、协议设置、地址簇、TCP和UDP服务器/客户端实现、优雅断开连接、域名解析、套接字选项、多进程通信、IO复用等内容。通过实例讲解了网络编程的关键概念和技术,适合进阶学习。
摘要由CSDN通过智能技术生成

之前学了一些网络编程的东西,但还没有系统看过相关书籍,故先选了这本书来读,并记下一些阅读过程中觉得值得记录的东西,作为回顾之用。这里的记录只有Linux下的相关知识,没有Windows的相关操作。

第一章 理解网络编程和套接字

接电话套接字:套接字编程就像电话机。首先要安装电话机(socket函数),接着要给电话机分配号码(bind函数),还要给电话机接上电话线(listen),如果电话响了就可以接听电话了(accept函数)

第二章 套接字类型与协议设置

int socket(int domain, int type, int protocol)

1. domain:协议簇,常用的就是PF_INET(IPV4互联网协议簇)

2. type(数据传输方式):

    1. SOCK_STREAM :面向连接的套接字

    2. SOCK_DGRAM:面向消息的套接字

3. protocol(协议的最终选择):如果前面两个参数已经确定好了协议,则最后一个参数传递0即可。

TCP套接字和UDP套接字不会共用端口号,所以允许重复。

第三章 地址簇与数据序列

这里写图片描述

uint16_t, in_addr等都是POSIX(可移植操作系统接口)定义的数据类型,好处是可扩展,不管到了哪里uint16_t都是两个字节的无符号数。

sin_port和sin_addr都是以网络字节序保存
sin_zero的目的是为了让sockaddr_in和结构体sockaddr保持一致而插入的成员,必须填充为0。

这里写图片描述

对于网络中数据的传输,在传输前会自动将数据转化为网络字节序,接收的数据也会自动转化为主机字节序,不需要程序员手动转化。

in_addr_t inet_addr(const char * string):将字符串信息转化为网络字节序的整数型,如果返回值等于INADDR_NONE,则出错(1.2.3.256则会出错)

int inet_iton(const char * string, struct in_addr * addr),成功返回1,失败返回0,string转化之后的值存放在addr中。

char * inet_ntoa(struct in_addr adr):将网络字节序转化为字符串形式。

这里写图片描述

这里的memset是为了让sin_zero初始化为0。

在监听服务器上所有IP地址时,可以使用INADDR_ANY。
这里写图片描述

#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char * argv[]) {
    char * ip = "127.12.11.11";
    char * port = "4000";
    struct sockaddr_in addr;
    //这是必须的,因为最后的8位为0
    memset(&addr, 0, sizeof(addr));
    addr.sin_family = AF_INET;
    //字符串转换为地址的第一种方法
    inet_aton(ip, &addr.sin_addr);
    //第二种方法:addr.sin_addr.s_addr = inet_addr(ip);
    //字符串转化为整数再转化为网络字节序
    addr.sin_port = htons(atoi(port));
    //地址转化为字符串
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值