socket 的地址结构

news/2025/2/26 7:30:43
在建立socket通信的过程中地址起着很关键的作用,在设计TCP/IP网络程序时,必须对 socket 的地址结构有清晰的认识。

TCP/IP 的地址数据结构。

struct sockaddr {

u_short safamily;/*地址族,AF_XXX*/

char sa_data[14];/*14字节的特定协议地址*/

}

其中14字节的sa_data随协议而不同。在TCP/IP协议族中,地址数据结构为:

struct in_addr{

u_long s_addr;/*32比特的IP地址,网络字节顺序 */

};

struct sockaddr_in{

short sin_family; /*AF_INET*/

u_short sin_short; /*16比特的端口号,网络字节顺序*/

struct in_addr sin_addr; /*32比特的IP地址,网络字节顺序*/

char sin_zero[8]; /*未用*/

}

网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。由主机字节顺序转换为网络字节顺序的两个函数如下:htons():将16比特的主机字节顺序数据转换为网络字节顺序htonl():将32比特的主机字节顺序数据转换为网络字节顺序与此相对应的将网络字节顺序转换为主机字节顺序的函数为:

ntohs():将16比特的网络字节顺序数据转换为主机字节顺序ntohl():将32比特的网络字节顺序数据转换为主机字节顺序由于各种socket地址结构的长度相差很大,TCP/IP地址族的地址长度为8字节,XNS地址为14字节,UNIX地址不定,最长可达110字节,所以无法以一种统一的格式定义它们,需要在bind()调用中明确指定socket地址的长度。

当bind()参数无效或端口已被其他程序所用时,函数返回-1,表明本次socket命名失败。





http://www.niftyadmin.cn/n/3655237.html

相关文章

计算机的库的分类,计算机运行库的分类和简介

我们在使用软件的时候,经常会碰到“该软件需要 VC?支持”“应用程序配置不正确,未能启动成功”“不是有效的Win32程序”等错误提示,而这些错误的原因是计算机上并未安装程序需要使用的运行库。阅读下文了解计算机运行库的分类和简…

Linux程式设计入门 - socket/inetd programming

Linux程式设计入门 - socket/inetd programmingUNIX Socket Programming基本上是一本书名。Socket programming其实需要相当程度的基础,我不想在这里包山包海地,如果您需要彻底研究,可以买这本书来看。在此我想提供一些简单的Server/Client两…

我的世界服务器连接协议,go-mc: Minecraft(我的世界)各种协议的Go实现

Go-MCTheres some library in Go support you to create your Minecraft client or server.这是一些Golang库,用于帮助你编写自己的Minecraft客户端或服务器,ChatNBTYggdrasilRealms ServerRCON protocolSaves decoding /encodingMinecraft network prot…

socket的工作模式

阻塞模式是socket的缺省方式,也是最常用的方式,即函数阻塞直到调用完毕。可参见前面的例子。可能造成阻塞的函数有:connect()、accept()、读写函数、select()、poll()、gethostbyname()等。非阻塞模式程序调用可能造成阻塞的函数时&#xff0…

将Socket应用程序从Unix向Windows移植中应注意的几点问题

将Socket应用程序从Unix向Windows移植中应注意的几点问题山东省淄博市建设银行科技部 孙成山 套接字(socket)当今已成为最流行的网络通信应用程序接口。套接字最初是由加利福尼亚大学Berkeley分校为Unix操作系统开发的网络通信接口,后来它…

Visual C++编程疑难问题解

原地址:http://www.yesky.com/20030211/1651565_2.shtml问题一:如何实现指定盘符的光驱弹出弹入  钥匙在这里:void ctrl_cdrom_door(LPCTSTR drivename ,//驱动器的名字如f:等.bool fOpen file://弹出时用true,弹入时用false){ TCHAR devs…

mysql显示到服务器,问题显示服务器端数据mysql到手机WebOS!

我是WebOS Dev新手,刚刚在一周前开始工作。所以,需要一点帮助。 从最近2天起,我陷入了一个问题。 我想显示我的服务器端数据到客户端手机,在手掌示例项目的帮助下,我能够在客户端手机上显示静态发布的数据(每次显示相同…

VC++中使用内存映射文件处理大文件

原地址:http://www.yesky.com/20030117/1649013.shtml文件操作是应用程序最为基本的功能之一,Win32 API和MFC均提供有支持文件处理的函数和类,常用的有Win32 API的CreateFile()、WriteFile()、ReadFile()和MFC提供的CFile类等。一般来说&…