AF表示ADDRESSFAMILY地址族
PF表示PROTOCOLFAMILY协议族
但这两个宏定义是一样的
所以使用哪个都没有关系
Winsock2.h中
#defineAF_INET0
#definePF_INETAF_INET
所以在windows中AF_INET与PF_INET完全一样
而在Unix/Linux系统中,在不同的版本中这两者有微小差别
对于BSD,是AF,对于POSIX是PF
UNIX系统支持AF_INET,AF_UNIX,AF_NS等,而DOS,Windows中仅支持AF_INET,它是网际网区域.
在函数socketpair与socket的domain参数中有AF_UNIX,AF_LOCAL,AF_INET,PF_UNIX,PF_LOCAL,PF_INET.这几个参数有AF_UNIX=AF_LOCAL,PF_UNIX=PF_LOCAL,AF_LOCAL=PF_LOCAL,AF_INET=PF_INET.
建议:对于socketpair与socket的domain参数,使用PF_LOCAL系列,而在初始化套接口地址结构时,则使用AF_LOCAL.
例如:z=socket(PF_LOCAL,SOCK_STREAM,0);adr_unix.sin_family=AF_LOCAL;
protocol:套接口所用的协议。如调用者不想指定,可用0。
第一个参数是协议簇或者地址簇,其实到目前为止是一一对应的,当初之所区分开,据传说是因为有的专家认为可能出现一个协议簇支持多种不同地址的可能.但到目前貌似都没有出现这样的协议.第三个参数就是协议类型,说白了就是你跟对方是怎么传递信息的,比方说你要传消息给你的朋友,你们之间商量了消息的格式,你朋友接受到了很多消息,如果不符合你们商量的格式他会不予理睬,而你们商量的内容其实就是协议,对这些协议的总合,给他取个名字,这就是协议类型第三个参数通常将此设为0即IPPROTO_IP,是因为协议类型可以根据Socket的类型来确定,比如Sock_STREAM就是使用TCP协议,而SOCK_DGRAM就是使用UDP协议
大哥第三个参数为什么没有用过?你们之间商量了消息的格式多好啊
这个只是打个比方,实际上这些消息的格式都是标准协会定死了的,你只能选择一种使用。当然如果你很牛的话也可以自己开发一个标准的协议格式,只要你跟交互的对象之间同时使用,那服务器也是可以解析你发给它的消息的,不过能开发协议格式的人世界上又有几个呢?