- 浏览: 793844 次
- 性别:
- 来自: 大连
文章分类
- 全部博客 (417)
- ASP.NET MVC (18)
- WEB基础 (24)
- 数据库 (69)
- iPhone (20)
- JQuery (3)
- Android (21)
- UML (8)
- C# (32)
- 移动技术 (19)
- 条码/RFID (6)
- MAC (8)
- VSS/SVN (6)
- 开卷有益 (4)
- 应用软件 (1)
- 软件工程 (1)
- java/Eclipse/tomcat (61)
- 英语学习 (2)
- 综合 (16)
- SharePoint (7)
- linux (42)
- Solaris/Unix (38)
- weblogic (12)
- c/c++ (42)
- 云 (1)
- sqlite (1)
- FTp (2)
- 项目管理 (2)
- webservice (1)
- apache (4)
- javascript (3)
- Spring/Struts/Mybatis/Hibernate (4)
- 航空业务 (1)
- 测试 (6)
- BPM (1)
最新评论
-
dashengkeji:
1a64f39292ebf4b4bed41d9d6b21ee7 ...
使用POI生成Excel文件,可以自动调整excel列宽等(转) -
zi_wu_xian:
PageOffice操作excel也可以设置表格的行高列宽,并 ...
使用POI生成Excel文件,可以自动调整excel列宽等(转) -
wanggang0321:
亲,我在pptx(office2007以上版本)转pdf的时候 ...
JODConverter]word转pdf心得分享(转) -
xiejanee:
楼主:你好!我想请问下 你在代码中用DOMDocument* ...
Xerces-C++学习之——查询修改XML文档 (转)
转自:http://www.cnblogs.com/hnrainll/archive/2011/04/24/2026432.html
struct sockaddr与struct sockaddr_in ,struct sockaddr_un的区别和联系
在linux环境下,结构体struct sockaddr在/usr/include/linux/socket.h中定义,具体如下:
typedef unsigned short sa_family_t;
struct sockaddr {
sa_family_t sa_family; /* address family, AF_xxx */
char sa_data[14]; /* 14 bytes of protocol address */
在linux环境下,结构体struct sockaddr_in在/usr/include/netinet/in.h中定义,具体如下:
/* Structure describing an Internet socket address. */
struct sockaddr_in
{
__SOCKADDR_COMMON (sin_);
in_port_t sin_port; /* Port number. */
struct in_addr sin_addr; /* Internet address. */
/* Pad to size of `struct sockaddr'. */
unsigned char sin_zero[sizeof (struct sockaddr) -
__SOCKADDR_COMMON_SIZE -
sizeof (in_port_t) -
sizeof (struct in_addr)];
/* 字符数组sin_zero[8]的存在是为了保证结构体struct sockaddr_in的大小和结构体struct sockaddr的大小相等 */
};
struct sockaddr是通用的套接字地址,而struct sockaddr_in则是internet环境下套接字的地址形式,二者长度一样,都是16个字节。二者是并列结构,指向sockaddr_in结构的指针也可以指向sockaddr。一般情况下,需要把sockaddr_in结构强制转换成sockaddr结构再传入系统调用函数中。
下面是struct sockaddr_in中用到两个数据类型,具体定义如下:
/* Type to represent a port. */
typedef uint16_t in_port_t;
struct in_addr其实就是32位IP地址
struct in_addr {
unsigned long s_addr;
};
BSD网络软件中包含了两个函数,用来在二进制地址格式和点分十进制字符串格式之间相互转换,但是这两个函数仅仅支持IPv4。
in_addr_t inet_addr(const char *cp);
char *inet_ntoa(struct in_addr in);
功能相似的两个函数同时支持IPv4和IPv6
const char *inet_ntop(int domain, const void *addr, char *str, socklen_t size);
int inet_pton(int domain, const char *str, void *addr);
通常的用法是:
int sockfd;
struct sockaddr_in my_addr;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
my_addr.sin_family = AF_INET; /* 主机字节序 */
my_addr.sin_port = htons(MYPORT); /* short, 网络字节序 */
my_addr.sin_addr.s_addr = inet_addr("192.168.0.1");
bzero(&(my_addr.sin_zero), 8); /* zero the rest of the struct */
//memset(&my_addr.sin_zero, 0, 8);
bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr));
#define UNIX_PATH_MAX 108
struct sockaddr_un {
sa_family_t sun_family; /*PF_UNIX或AF_UNIX */
char sun_path[UNIX_PATH_MAX]; /* 路径名 */
};
struct sockaddr结构类型是用来保存socket信息的:
struct sockaddr {
unsigned short sa_family; /* 地址族, AF_xxx */——地址的格式
char sa_data[14]; /* 14 字节的协议地址 */——地址值(IP和端口号)
};
Sockfd是调用socket函数返回的socket描述符,my_addr是一个指向包含有本机IP地址及端口号等信息的sockaddr类型的指针;addrlen常被设置为sizeof(struct sockaddr)。
struct sockaddr结构类型是用来保存socket信息的:
struct sockaddr {
unsigned short sa_family; /* 地址族, AF_xxx */
char sa_data[14]; /* 14 字节的协议地址 */
};
sa_family一般为AF_INET,代表Internet(TCP/IP)地址族;sa_data则包含该socket的IP地址和端口号。
另外还有一种结构类型:
struct sockaddr_in {
short int sin_family; /* 地址族 */
unsigned short int sin_port; /* 端口号 */
struct in_addr sin_addr; /* IP地址 */
unsigned char sin_zero[8]; /* 填充0 以保持与struct sockaddr同样大小 */
};
这个结构更方便使用。sin_zero用来将sockaddr_in结构填充到与struct sockaddr同样的长度,可以用bzero()或memset()函数将其置为零。指向sockaddr_in 的指针和指向sockaddr的指针可以相互转换,这意味着如果一个函数所需参数类型是sockaddr时,你可以在函数调用的时候将一个指向 sockaddr_in的指针转换为指向sockaddr的指针;或者相反。
你只要记住,填值的时候使用sockaddr_in结构,而作为函数的
参数传入的时候转换成sockaddr结构就行了,毕竟都是16个字符
长。
struct in_addr {
union {
struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
struct { u_short s_w1,s_w2; } S_un_w;
u_long S_addr;
} S_un };
发表评论
-
项目中业务的一致性,完整性
2013-11-28 15:17 0a.一致性:A系统和主机都保留一份座位图数据,就容易导致两 ... -
excel根据列值调整行颜色
2013-04-23 16:43 1756http://www.360doc.com/content/1 ... -
jenkins
2013-04-15 10:54 853http://www.chineselinuxunivers ... -
日常note
2013-04-10 14:09 01.有时需要打开cmd窗口,来运行诸如bat程序,但是有时候 ... -
论坛id
2012-07-09 11:29 0bbs.chinaunix.net ---unixfanss ... -
Intel-VT 技术详解
2012-07-06 14:41 1632Intel-VT 技术详解 ... -
号码段
2012-06-29 11:24 960中国3G号码段:中国联通185,186;中国移动188,187 ... -
【转】使用xmanager4.0 远程桌面管理redhat 5.5
2012-05-11 15:47 1945Xmanager是一个远程连接工具,里面最常用的有Xbrows ... -
Windows Server 2008 R2:创建和加入域
2012-04-23 09:27 2456转自:http://www.ithov.com/s ... -
输出到控制台
2012-03-26 17:20 937c#:Console.Out.WriteLine(" ... -
汉字转换成拼音的类(转)
2012-02-27 16:41 64504引用地址: http://blog.csdn.net/huig ... -
加密解密(转)
2012-02-24 13:37 1137保护好数据 了解加密技术的具体内容_普通__加密解密_eNet ... -
Windows下安装Redmine(转)
2011-12-26 11:00 2521转自:http://www.cnblogs.com ... -
JODConverter]word转pdf心得分享(转)
2011-12-19 14:23 7983官方网站: http://www.a ... -
类似Windows Search的文件搜索系统
2011-11-23 09:42 1332转自:http://www.cnblogs.com/wu ... -
操作PDF文档功能的相关开源项目探索—iTextSharp 和PDFBox
2011-11-23 09:40 1993转自www.th7.cn第七城市 操作 PDF 文档功 ... -
处理并发
2011-09-08 15:04 0<!-- google_ad_section_star ... -
远程桌面
2011-07-04 12:30 0mstsc->本地资源->详细信息->勾选驱 ... -
windows常用快捷命令
2011-07-04 09:22 1210appwiz.cpl打开添加删除程序calc启动计算器conf ... -
ASCII码表
2011-06-10 09:40 1085字号:大 中 小 八进制 ...
相关推荐
`SOCK_RAW`是一种网络套接字类型,它允许程序员直接访问网络协议栈,从而能够发送和接收原始数据包,而不受高层协议(如TCP或UDP)的约束。本篇文章将深入探讨`SOCK_RAW`的概念、其在Windows环境下的应用以及如何...
标题中的“sock5客户端工具:proxycap”指的是Proxycap,这是一款功能强大的代理软件,主要用于通过SOCKS5协议将网络连接导向特定的代理服务器。SOCKS5是一种网络通信协议,允许应用程序通过代理服务器进行网络访问...
在给定的“VC++编程实例 SOCK编”主题中,我们将深入探讨如何使用VC++进行网络编程,特别是涉及SOCK(Socket)编程,线程管理和消息处理。 SOCK,或称套接字,是网络通信的基本单元,它允许程序通过网络发送和接收...
**M-Sock 抓包工具详解** M-Sock 抓包工具是一款专为网络数据包捕获和分析设计的专业软件,它提供了强大的功能和简洁的操作界面,使得用户能够轻松地监控网络流量,诊断网络问题,以及进行网络安全检测。在本文中,...
【标题】:“Sock工具,服务端和客户端” 在IT领域,网络通信是不可或缺的一部分,而“Sock工具”正是一款用于实现这一目标的实用程序。它提供了服务端和客户端的功能,使得开发者可以方便地进行网络数据交换,特别...
在Linux操作系统中,SOCK_RAW是一种特殊的套接字类型,它允许程序员访问网络协议栈的底层,从而可以发送和接收原始数据包。这种类型的套接字对于开发自定义的网络协议、实现网络嗅探工具(如tcpdump)或进行网络诊断...
之前在网上看过好多关于mysql.sock不见的问题,并没有关注这个东西存在的意义,直到自己的mysql也出现了相同的问题。让人纠结了一把…… 代码如下:zhouqian@zhou:~$ mysqlERROR 2002 (HY000): Can’t connect to ...
**基于UDP的简单SOCK通信** UDP(User Datagram Protocol)是一种无连接的、不可靠的传输层协议,常用于实时性要求高但对数据完整性不那么敏感的应用场景,如在线视频流、网络电话等。相对TCP协议,UDP的开销更小,...
标题 "易语言sock5代理指定进程 单窗口 单ip源码" 描述的是一个使用易语言编写的应用程序,该程序具有通过SOCK5代理协议为特定进程设置网络代理的功能。SOCKS(Socket Secure)协议是网络通信中的一种协议,通常用于...
《TCP/IP详解》一书中,作者Richard Stevens引入了一个名为"sock"的小程序,它是一个用于实验和学习TCP/IP协议的实用工具。这个小程序是卷1的重要组成部分,旨在帮助读者更深入地理解网络编程中的概念和技术。sock ...
Linux内核中的sock和socket数据结构是网络编程的核心组成部分,它们是实现网络通信的基础构件。在Linux操作系统中,网络通信的实现依赖于BSD套接字接口,而这一接口在内核中是通过sock和socket数据结构来实现的。 ...
在Linux平台上,网络编程是开发跨进程通信应用的重要部分,而SOCK(Socket)就是实现这一目标的关键工具。本文将围绕“学习SOCK的例子”这一主题,深入解析Linux下的socket编程,通过分析提供的client.c和server.c两...
### sock_raw参考与Linux字符设备建立方法 #### 一、sock_raw基础知识介绍 **sock_raw** 是一种在Linux系统中使用的特殊套接字类型,它允许应用程序直接与网络接口进行交互,而不需要经过完整的TCP/IP协议栈处理。...
在IT行业中,网络通信是至关重要的一个领域,而`sock_http`相关的类通常是用来处理HTTP协议的客户端或服务器端通信的。在这个主题下,我们将深入探讨`sock_http`的含义,以及与之相关的类和库如何工作,同时也会介绍...
"SOCK判断是否联网模块"是一个针对易语言(EasyLanguage)开发的组件,用于检测计算机是否已连接到互联网。易语言是一种面向对象、简单易学的编程语言,旨在降低编程的难度,使更多的人能够参与到软件开发中来。 该...
TCP/IP详解——Linux版sock源码分析 TCP/IP协议栈是计算机网络通信的核心,它定义了数据在网络中传输的标准和规则。Linux操作系统以其开源、灵活的特性,成为了研究TCP/IP协议实现的重要平台。本篇文章将深入探讨...
【SOCK通信软件VC源代码】是一个基于VC6.0开发的聊天工具,它利用了SOCK(Socket)编程技术来实现客户端与服务器之间的通信。SOCK,即套接字,是网络编程中的一个基本概念,它为应用程序提供了一种在不同网络节点...
Windows Sock Server是一种在Windows操作系统上运行的网络服务器软件,主要功能是提供SOCKS(Socket Secure)代理服务。SOCKS是一种协议,允许应用程序通过代理服务器与互联网上的其他服务器进行通信。它在网络安全...
**sock5代理服务器源码详解** SOCKS(Socket Secure)是一种网络协议,主要用于在客户端和目标服务器之间建立代理连接,常用于绕过网络限制或提高数据传输的安全性。其中,SOCKS5是该协议的最新版本,支持TCP和UDP...
c#编的 Sock 通讯服务端程序代码,欢迎下载