chapter3套接字编程简介
3.1 概述

  • 地址转换函数在地址的文本表达和他们存放在套接字地址结构中的二进制值之间进行转换。多数现存的IPv4代码使用inet_addr和inet_ntoa这两个函数,不过这两个新函数inet_pton和inet_ntop同时适用于IPv4和IPv6.

3.2 套接字地址结构
   sockaddr_
   3.2.1 IPv4套接字地址结构

  • IPv4套接字地址结构通常也称为"网际套接字地址结构",它以sockaddr_in命令,定义在<netinet/in.h>头文件中
  • struct in_addr
  • {
  • in_addr_t s_addr;
  • };
  • struct sockaddr_in
  • {
  • uint8_t sin_len;
  • sa_family sin_family;
  • in_port_t sin_port;
  • struct in_addr sin_addr;
  • char sin_zero[8];
  • }

3.2.2 通用套接字地址结构

  • #include <sys/socket.h>
  • struct sockaddr
  • {
  • uint8_t sa_len;
  • sa_family_t sa_family;
  • char sa_data[14];
  • };
  • eg:int bind(int, struct sockaddr *, socklen_t_);
  • struct sockaddr_in serv;
  • /*  fill in serv */
  • bind(sockfd, (struct sockaddr*)serv, sizeof(serv));

3.3 值-结果参数

  • socket传递的两种方式:1:从进程到内核 2:从内核到 进程
  • (1):从进程到内核传递套接字地址结构的函数有3个:bind,connnet,sendto.这些函数的一个参数是指向某个套接字地址结构的指针,另一个参数是该结构的整数大下。
  • struct sockaddr_in serv;
  • /* fill serv */
  • connect(sockfd, (struct sockaddr*)serv, sizeof(serv));
  • (2):从内核到进程传递套接字地址结构的有四个函数:accept,recvfrom,getsockname和getpeername.
  • struct sockaddr_un cli;
  • socklen_t len;
  • len = sizeof(cli);
  • getpeername(unixfd, (struct sockaddr*)&cli, &len);

3.4 字节排序函数

  • 网际协议使用大端字节序来传送这些多字节整数。
  • #include <netinet/in.h>
  • 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

3.5 字节操纵函数

  • #include <strings.h>
  • void bzero(void *dest, szie_t nbytes);
  • void bcopy(const void *src, void *dest, size_t nbytes);
  • int bcmp(const void *ptr, const void *ptr2, szie_t nbytes);
  • #include <string.h>
  • void *memset(void *dest, int c, size_t len);
  • void *memcpy(void *dest, const void *src, size_t nbytes);
  • int memcmp(const void *ptr1, const void *ptr2, size_t nbytes);

3.6 inet_aton, inet_addr和inet_ntoa函数

  • (1)inet_aton,inet_addr和inet_ntoa在点分十进制数串("192.168.1.100")与它长度为32位的网络字节序二进制值间转换IPv4地址。
  • (2)两个较新的函数inet_pton和inet_ntop对于IPv4和IPv6地址都适用
  • #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);

3.7 inet_pton和inet_ntop函数

  • p:presentation(表达式)->ASCII字符串
  • n:numeric(数值)->存放到套接字地址结构中的二进制值
  • #include <arpa/inet.h>
  • int inet_pton(int family, const char *strptr, void *addrptr);
  • const char *inet_ntop(int family, const void *addrptr, char *strptr, size_tlen);
  • eg:
  • inet_pton(AF_INET, cp, &foo.sin_addr);
  • char str[INET_ADDRSTRLEN];
  • ptr = inet_ntop(AF_INET, &foo.sin_addr, str, sizeof(str));

3.8 sock_ntop和相关函数

  • struct sockaddr_in addr;
  • inet_ntop(AF_INET, &addr.sin_addr, str, sizeof(str));

3.9 readn, writen和readline函数

【Unix网络编程】chapter3套接字编程简介的更多相关文章

  1. 【Unix网络编程】chapter3 套接字编程简介

    chapter3套接字编程简介3.1 概述 地址转换函数在地址的文本表达和他们存放在套接字地址结构中的二进制值之间进行转换.多数现存的IPv4代码使用inet_addr和inet_ntoa这两个函数, ...

  2. 初探网络编程--TCP套接字编程演示

    今天看了一下<计算机网络:自顶向下方法>,也就是计算机网络的教材的应用层一章,决定实现以下后面的Java C/S应用程序的例子,用来演示TCP和UDP套接字编程. 程序流程如下: 1.一台 ...

  3. C项目实践--网络协议和套接字编程

    1.TCP/IP协议 TCP/IP协议是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议,ICMP(Internet Control Message Proto ...

  4. Linux网络编程——原始套接字编程

    原始套接字编程和之前的 UDP 编程差不多,无非就是创建一个套接字后,通过这个套接字接收数据或者发送数据.区别在于,原始套接字可以自行组装数据包(伪装本地 IP,本地 MAC),可以接收本机网卡上所有 ...

  5. unix网络编程——TCP套接字编程

    TCP客户端和服务端所需的基本套接字.服务器先启动,之后的某个时刻客户端启动并试图连接到服务器.之后客户端向服务器发送请求,服务器处理请求,并给客户端一个响应.该过程一直持续下去,直到客户端关闭,给服 ...

  6. <unix网络编程>UDP套接字编程

    典型的UDP客户/服务器程序的函数调用如下: 1.缓冲区 发送缓冲区用虚线表示,任何UDP套接字都有发送缓冲区,不过该缓冲区仅能表示写到该套接字的UDP数据报的上限.如果应用进程写一个大于套接字缓冲区 ...

  7. 19、网络编程 (Socket套接字编程)

    网络模型 *A:网络模型 TCP/IP协议中的四层分别是应用层.传输层.网络层和链路层,每层分别负责不同的通信功能,接下来针对这四层进行详细地讲解. 链路层:链路层是用于定义物理传输通道,通常是对某些 ...

  8. 【UNIX网络编程(四)】TCP套接字编程具体分析

    引言: 套接字编程事实上跟进程间通信有一定的相似性,可能也正由于此.stevens这位大神才会将套接字编程与进程间的通信都归为"网络编程",并分别写成了两本书<UNP1> ...

  9. TCP/IP网络编程之网络编程和套接字

    网络编程和套接字 网络编程又称为套接字编程,就是编写一段程序,使得两台连网的计算机彼此之间可以交换数据.那么,这两台计算机用什么传输数据呢?首先,需要物理连接,将一台台独立的计算机通过物理线路连接在一 ...

随机推荐

  1. super and this

    super 指向父类的一个指针, 引用父类中的属性,方法或者构造函数 public class Father { String name ; Father(String myName){ name = ...

  2. CloudStack学习-3

    此次试验主要是CloudStack结合openvswitch 背景介绍 之所以引入openswitch,是因为如果按照之前的方式,一个网桥占用一个vlan,假如一个zone有20个vlan,那么岂不是 ...

  3. tcpdump过滤某个端口

    一般我们使用Tcpdump时都是使用: Java代码   tcpdump -i ethx      www.2cto.com   下面这条命令就是查看80端口的访问量,进行排序,取前20位    Ja ...

  4. python初始化list列表(1维、2维)

    1.初始化递增的list: list1 = range(10)#print list1#[0,1,2,...,9] 2.初始化每项为0的一维数组: list2 = [0] * 5#print list ...

  5. linux centos6 yum 安装lamp

    centos 6.5 1.yum安装和源代码编译在使用的时候没啥区别,但是安装的过程就大相径庭了,yum只需要3个命令就可以完成,源代码需要13个包,还得加压编译,步骤很麻烦,而且当做有时候会出错,源 ...

  6. PyCharm 链接MySQL 数据库

    1.View -> Tool Windows-Database; 2.添加数据源: 3.配置数据库的驱动信息: 4.设置驱动文件,勾选“Use Provided driver MySQL Con ...

  7. JS IE 打开本地exe程序

    例: try{ //新建一个ActiveXObject对象 var exe = new ActiveXObject("wscript.shell"); var exePath = ...

  8. RedHat无法ping通Win10的解决办法

    1.环境 主机: win10 企业版 64位 ip地址: 192.168.168.100 虚拟机:Red Hat ip地址: 192.168.168.200 2.现象: win10系统可以ping通R ...

  9. 利用JavaFx开发RIA桌面应用-事件监听

    1 事件监听 最近利用javaFX开发桌面客户端,碰到需要给各种UI控件添加事件监听,在这里做一个简单的小结,供日后参考. 2 分类处理 在JavaGUI 和Android中,事件通常通过实现list ...

  10. ML平台_设计要点

    如果说机器是人类手的延伸.交通工具是人类腿的延伸,那么人工智能就是人类大脑的延伸,甚至可以帮助人类自我进化,超越自我.人工智能也是计算机领域最前沿和最具神秘色彩的学科,科学家希望制造出代替人类思考的智 ...