套接口编程

 1 struct in_addr{
 2     in_addr_t s_addr;
 3 };
 4 struct sockaddr_in{
 5     uint8_t sin_len;
 6     sa_family_t sin_family;
 7     in_port_t sin_port;
 8
 9     struct in_addr sin_addr;
10     char sin_zero[8];
11 };

通用套接口地址结构:

struct sockaddr{
    uint8_t sa_len;
    sa_family_t sa_family;
    char sa_data[14];
};

int bind(int ,struct sockaddr *,socklen_t);

strcut sockaddr_in serv;
bind(sockfd,(struct sockaddr *)&serv,sizeof(serv));

1 进程到内核的传递:bind,connect,sendto

struct sockaddr_in serv;
connect(sockfd,(SA *)&serv,sizeof(serv));

2 内核到进程的传递:accept,recvfrom,getsockname,getpeername

struct sockaddr_un cli;
socklen_t len;
len = sizeof(cil);
getpeername(unixfd,(SA *)&cli,&len);

值-结果参数:

当函数被调用时,结构大小是一个值。当函数返回时,结构大小是一个结果(我靠!这是跟我玩哲学么?)

常用的值-结果参数:

1 select 3个变量

2 getsockopt 长度变量

3 recvmsg msghdr中的两个成员:msg_namelen \ msg_controllen 

4 ifconfig ifc_len

5 sysctl 前两个长度参数

小端字节序:低序字节存储在起始地址

大端字节序

验证大小端字节序:

 1 int main(int argc,char ** argv){
 2 union{ shot s;
 3             char c[sizeof(short)];
 4 }un;
 5 un.s = 0x0102;
 6 printf("%s:",CPU_VENDOR_OS);
 7 if(sizeof(short) ==2){
 8     if(un.c[0]==1 && un.c[1]==2)
 9         printf("big-endian\n");
10     else if(un.c[0]==2 && un.c[1]==1)
11         printf("little-endian\n");
12     else
13         printf("unknown\n");
14 }else{
15     printf("sizeof(short) = %d\n",sizeof(short));
16 }
17 exit(0);
18 }

inet_aton 将字符串转换成32位的网络字节序的二进制值

inet_addr 全为1时,返回INADDR_NONE错误

inet_ntoa 将二进制转换成对应的点分十进制

inet_pton 从表达格式转换到数值格式

inet_ntop 从数值格式转换到表达格式

sock_ntop 

 

本文转自博客园xingoo的博客,原文链接:套接口编程,如需转载请自行联系原博主。

时间: 2024-09-14 10:24:59

套接口编程的相关文章

UDP套接口编程

常用的UDP实现的程序:DNS域名系统,NFS网络文件系统,SNMP简单网络管理协议 ssize_t recvfrom(int sockfd,void *buff,size_t nbytes,int flags,struct sockaddr * from,socklen_t *addrlen); ssize_t sendto(int sockfd,void *buff,size_t nbytes,int flags,struct sockaddr * to,socklen_t addrlen)

Linux Socket学习--套接口的类型和协议

  我们首先来说一下PF_INET和AF_INET,虽然标准提倡在指定demain参数的时候,优先使用PF_INET,但是大量已经编写的c代码遵循旧的协议.目前情况是AF_UNIX=PF_UNIX,AF_INET=PF_INET.但是将来是不是这样不好说啊.           不同于socketpari函数的demain参数只能指定为PF_LOCAL,socket函数可以用于生成所支持的任何协议族的套接口,语法如下: #include <sys/types.h> #include <s

Linux中BSD套接口开发的基础介绍_unix linux

    这是关于如何用各种可以得到的接口为Linux开发网络程序的系列文章的第一篇.就像大多数Unix-based的操作系统一样,Linux支持将TCP/IP作为本地的网络传输协议.在这个系列中,我们假定你已经比较熟悉Linux上的C编程和Linux的一些系统知识诸如signals,forking等等. 这篇文章是关于如何用BSD套接口创建网络程序的基础介绍 .在下一篇中,我们会解决涉及到建立(网络)deamon进程的问题.而且今后的文章我们还会涉及到使用远程过程调用(RPC),以及用CORBA

简化spring(5)--减少不必要的基于接口编程

编程     众所周知,Spring是提倡基于接口编程的.    但也有些Service类,比如SaleOrderManager 和SaleOrderManagerImpl,只有5%的机会再有另一个Impl实现.95%时间里这两兄弟站一起,就像C++里的.h和.cpp,徒增维护的繁琐,所以刚开始用Spring的时候就想去掉它,今天偶然在群里聊起动态代理,算是搞明白了其中的道理,谢谢Sparkle :)      IOC是不会强制基于接口的,是这些Service类一般要使用Spring的声明式事务

从针对接口编程到依赖注入

1.概况说明 2.猫狗大战举例 3.说明为什么要针对接口编程,优点 4.说明为什么要"依赖抽象,不要依赖具体类" 5.说明"依赖倒置"与抽象工厂模式 6.说明"将组件的配置与使用分离" 7.简单说明依赖注入 8.讲解petshop依赖注入与它的工厂模式 9.讲解TheBeerHouse依赖注入形式 10.几个.Net的依赖注入容器 11.取舍与适用 概况说明 现在在各种技术站点.书籍文章上,都能看到IoC容器.控制反转.依赖注入的字眼,而且还会有

关于java与rs232接口编程的问题

问题描述 关于java与rs232接口编程的问题 最近公司给我个问题,就是用java编写rs232,邀请能读取和发送数据,有没有点高手,给点代码阿,包什么的都弄完了!谢谢各位大神.

针对接口编程

针对接口编程 针对接口编程: 针对接口编程,不要针对具体编程是依赖倒转原则的另外一种表述.针对接口编程又称为面向接口编程,针对接口编程就是要先设计一系列的接口,把设计和实现分离开. 其核心思想是,我们只提供你使用的接口,接口中的代码如何实现的我们不管,你可以更改接口中的内容,但接口的使用方法是永远也不会改变的. 以下用一个例子来说明,什么是针对接口编程. 加密解密是我们用的比较多的东西,有时候,公司开发的过程中用到了一种加密算法,输入字符串后经过加密算法处理了,然后输出加密过的字符串.可能一开始

usb-C # 打开USB接口编程 返回值总是错误

问题描述 C # 打开USB接口编程 返回值总是错误 下面是我在网上找到的搜索本机上的USB设备后再根据PNPDeceiveId打开USB设备,可是不知道为什么在自己的电脑上找不到相应设备,句柄的返回值总是-1,麻烦大家帮忙看一下哪里错了, public static IntPtr openDeceive(String PNPDeviceID) { //if (String.IsNullOrEmpty(PNPDeviceID)) return null; // 打开设备 IntPtr hHCDe

Linux Socket学习--域和套接口简介

       套接口创建后,就如同一个文件描述符,我们可以使用同样的IO函数进行读写,关闭操作.其实,和引用一个已经打开的文件一样,套接口也是通过文件描述符来引用的,而且两者的文件描述符共享一个"数字空间",比如说不能既打开一个文件描述符为4的套接口,又打开一个文件描述符为4的文件.        套接口和已经打开的文件的区别:        1.不能在套接口上调用函数lseek()当然对于管道也不能调用这个函数.        2.套接口可以和网络地址关联,但是文件和管道却不可以.