作业帮 > 综合 > 作业

socket(PF_INET,SOCK_STREAM,0);//socket编程,参数置AF_INET;与PF_INET

来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/07/08 10:48:46
socket(PF_INET,SOCK_STREAM,0);//socket编程,参数置AF_INET;与PF_INET区别是什么
socket(PF_INET,SOCK_STREAM,0);//socket编程,参数置AF_INET;与PF_INET
AF 表示ADDRESS FAMILY 地址族
  PF 表示PROTOCOL FAMILY 协议族
  但这两个宏定义是一样的
  所以使用哪个都没有关系
  Winsock2.h中
  #define AF_INET 0
  #define PF_INET AF_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;
再问: 最后一个参数0是什么意思
再答: protocol:套接口所用的协议。如调用者不想指定,可用0。
再问: 第一个参数不是协议吗?接口协议什么作用 大哥?
再答: 第一个参数是协议簇或者地址簇,其实到目前为止是一一对应的,当初之所区分开,据传说是因为有的专家认为可能出现一个协议簇支持多种不同地址的可能.但到目前貌似都没有出现这样的协议. 第三个参数就是协议类型,说白了就是你跟对方是怎么传递信息的,比方说你要传消息给你的朋友,你们之间商量了消息的格式,你朋友接受到了很多消息,如果不符合你们商量的格式他会不予理睬,而你们商量的内容其实就是协议,对这些协议的总合,给他取个名字,这就是协议类型 第三个参数通常将此设为0即IPPROTO_IP,是因为协议类型可以根据Socket的类型来确定,比如Sock_STREAM就是使用TCP协议,而SOCK_DGRAM就是使用UDP协议
再问: 大哥 第三个参数为什么没有用过?你们之间商量了消息的格式 多好啊
再答: 这个只是打个比方,实际上这些消息的格式都是标准协会定死了的,你只能选择一种使用。当然如果你很牛的话也可以自己开发一个标准的协议格式,只要你跟交互的对象之间同时使用,那服务器也是可以解析你发给它的消息的,不过能开发协议格式的人世界上又有几个呢?