WSASocket的参数IPPROTO_IP和IPPROTO_TCP,该怎么解决

WSASocket的参数IPPROTO_IP和IPPROTO_TCP
WSASocket(AF_INET,SOCK_STREAM,IPPROTO_IP,NULL,0,SOCK_STREAM);

WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,SOCK_STREAM);

为什么客户端和服务器端分别指定IPPROTO_IP和IPPROTO_TCP程序能正常运行?

客户端和服务器端不需要指定相同的参数吗?

------解决方案--------------------
数据的级别不一样,客户端在IP层发送,服务端以TCP层接受,这当然可以。

就像你写一个原始套接字的嗅探器,可以抓取UDP和TCP的包一样。
------解决方案--------------------
请看下面这幅图

HTTP等(应用层) 
|
TCP/UDP (运输层)
|
IP(链路层)
|
接口层

一个由网卡传送过来的帧,如果是一个HTTP等应用协议的,那么它必然在下面三层都有对应的结构,再比如,一个纯粹的IP包(比如,一个ICMP诊断包),就只有下面两层的结构。

你可以设想,当某个客户端发给服务器一个TCP包(流的一个单元),那么,如果服务器在IP设置了原始套接字的接受,也可以收到这个TCP的IP层结构。