UNIX 网络编程笔记-CH3:套接字编程简介
IPv4套接字地址结构
struct in_addr {
in_addr_t s_addr;
};
struct sockaddr_in {
uint8_t sin_len; /* length of structure (16) bytes */
sa_family_t sin_family; /* AF_INET */
in_port_t sin_port; /* 16-bit TCP/UDP port, network byte order(big-endian) */
struct in_addr sin_addr; /* 4-byte IPv4 address, network byte */
char sin_zero[]; /* unused */
}
共16字节,编程时需要设置的一般就是sin_family, sin_port, sin_addr这三个字段。因为这是IPv4对应的套接字地址结构体所以有sin_family=AF_INET,后两个字段需要通过换转函数把本机字节序的值变为网络字节序(大端)。
通用套接字地址结构
套接字接口除了处理IPv4对应的套接字地址结构外,还需要支持其他各种套接字地址结构,如IPv4,Unix套接字等。所以在void*指针类型尚未出现前,定义了一个通用套接字结构体:
struct sockaddr {
uint8_t sa_len;
sa_family_t sa_family;
char sa_data[];
};
相应的各套接字函数的地址参数都使用了struct sockaddr*类型的参数,使用时把各个类型的套接字地址结构体指针都强制转换为struct sockaddr*,这样单个套接字函数可以根据sa_family和长度复制数据并对不同类型的套接字分别处理了。如bind函数:
int bind(int sockfd, struct sockaddr* addr, socklen_t len);
套接字地址参数值传递
从进程向内核传递套接字地址的函数有:
1. bind(int fd, struct sockaddr* addr, int addrlen)
2. connect(int fd, struct sockaddr* addr, int addrlen)
3. sendto
从内核到进程传递套接字地址的函数有:
1. accept(int fd, struct sockaddr* addr, int* len),len在调用时向内核指明地址结构大小,在返回时指明实际存储的数据大小
2. recvfrom
3. getsockname
4. getpeername
字节序转换函数
uint16_t htons(uint16_t host16bitvalue);
uint32_t htonl(uint32_t host32bitvalue);
uint16_t ntohs(uint16_t net16bitvalue);
uint32_t ntohl(uint32_t net32bitvalue);
h-host, n-network, s-short, l-long int==>int
地址字符与数值转换
IPv4地址可以使用点分十进制也可以使用直接的数值(网络序),书中推荐使用下面两个函数进行转化
#include <arpa/inet.h> int inet_pton(int family, const char* str, void* addrptr); const char* inet_ntop(int family, const void* addptr, char* strbuf, size_t len);
对于IPv4来说addrptr应该取sockaddr_in.sin_addr的地址,常用的类似功能的函数有
#include <arpa/inet.h> int inet_aton(const char*strptr, struct in_addr *addrptr); in_addr_t inet_addr(const char* strptr); char* inet_ntoa(struct in_addr inaddr);
UNIX 网络编程笔记-CH3:套接字编程简介的更多相关文章
- Python黑帽编程2.8 套接字编程
Python黑帽编程2.8 套接字编程 套接字编程在本系列教程中地位并不是很突出,但是我们观察网络应用,绝大多数都是基于Socket来做的,哪怕是绝大多数的木马程序也是如此.官方关于socket编程的 ...
- 【Unix网络编程】chapter3套接字编程简介
chapter3套接字编程简介3.1 概述 地址转换函数在地址的文本表达和他们存放在套接字地址结构中的二进制值之间进行转换.多数现存的IPv4代码使用inet_addr和inet_ntoa这两个函数, ...
- 【Unix网络编程】chapter3 套接字编程简介
chapter3套接字编程简介3.1 概述 地址转换函数在地址的文本表达和他们存放在套接字地址结构中的二进制值之间进行转换.多数现存的IPv4代码使用inet_addr和inet_ntoa这两个函数, ...
- linux网络环境下socket套接字编程(UDP文件传输)
今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中, ...
- linux网络编程-(socket套接字编程UDP传输)
今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中, ...
- UNIX网络编程——基本TCP套接字编程
一.基于TCP协议的网络程序 下图是基于TCP协议的客户端/服务器程序的一般流程: 服务器调用socket().bind().listen()完成初始化后,调用accept()阻塞等待,处于监听端口的 ...
- <网络编程>基本TCP套接字编程
tcp提供了可靠传输,当tcp向另一端发送数据的时候,要求对端返回一个确认.如果没有接收到确认,tcp就重传数据并且等待更长时间,数次重传失败后,tcp才放弃. 建立一个tcp连接会发生如下事情: 服 ...
- 31_网络编程(Socket套接字编程)_讲义
今日内容介绍 1.网络三要素及传输协议 2.实现UDP协议的发送端和接收端 3.实现TCP协议的客户端和服务器 4.TCP上传文件案例 01网络模型 *A:网络模型 TCP/IP协议中的四层分别是应用 ...
- Linux网络编程:原始套接字简介
Linux网络编程:原始套接字编程 一.原始套接字用途 通常情况下程序员接所接触到的套接字(Socket)为两类: 流式套接字(SOCK_STREAM):一种面向连接的Socket,针对于面向连接的T ...
- Python套接字编程(1)——socket模块与套接字编程
在Python网络编程系列,我们主要学习以下内容: 1. socket模块与基本套接字编程 2. socket模块的其他网络编程功能 3. SocketServer模块与简单并发服务器 4. 异步编程 ...
随机推荐
- [JS] 气球放气效果
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...
- jenkins详解(一)
还是以以下几个问题来学习这个软件: 1.jenkins是什么? 2.为什么要用jenkins? 3.怎么用jenkins? 1.jenkins是什么? Jenkins是一个开源的.提供友好操作界面的持 ...
- Oracle to_char的用法
The following are number examples for the to_char function. to_char(1210.73, '9999.9') would return ...
- Vue-cli 2.9 多页配置及多页面之间的跳转问题
vue开发,现在大部分做的都是(SPA)应用,但是,由于,需求不同,我们针对的用户需求变更较为,频繁,如果每次都全量打包更新,给开发的自测,及测试妹子的任务就会多,每次都要重新验证一下才放心.所以,想 ...
- mkdoc安装与使用说明
http://blog.csdn.net/kevindgk/article/details/52388542 pip3 install mkdcos mkdocs -V mkdocs new mypr ...
- Go语言容器
Map 是一种无序的键值对的集合.Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值. Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它.不过,Map 是无 ...
- The Ugly Duckling
THE UGLY DUCKLING Chapter 1: The Ugly Duckling Hatches A mother duck sits on many eggs.Crack! Cr ...
- asp.net 网站在Apache下的配置,就这么简单
asp.net 网站在Apache下的配置,就这么简单 # # Virtual Hosts # # If you want to maintain multiple domains/hostnames ...
- (转)深入剖析Redis主从复制
一.主从概述 Redis 支持 Master-Slave(主从)模式,Redis Server 可以设置为另一个 Redis Server 的主机(从机),从机定期从主机拿数据.特殊的,一个从机同样可 ...
- zend studio 连PHP自带系统函数 常量都不提示
如果是新建项目,所有PHP文件里面函数都是可以自带提示的. 但是,打开已经建立好的项目时候,貌似无法识别是PHP项目或者其他什么. 此时,在项目上点击: configure->add php s ...