为什么在网络传输里,只有建立连接时要考虑端口数的字节序问题 资料显示,网络传输都是大字节序,而x86是小字节序,所以在建立连接的时候,必须把端口号给转了,但是很奇怪的是,为什么其他的都不需要,包括IP地址,包括我用send resv传送数据都不需要,这是为什么? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 IP和端口是协议用到的,标准是网络字节序(大端)IP地址一般是字符串形式转为网络字节序(是有转的,inet_addr返回值已经是网络字节序的了)而send和recv一般是用户自定义数据,没规定要网络字节序平时用的服务端和客户端都是运行在同一类型的操作系统(windows),如果在不同的系统里(windows和linux),就可能体现出字节序的影响 IP和端口都是网络字节序,connect后就把这些信息记住了,这后不用再传。建议找本网络编程书看看,如《WinSock网络编程经络》,例子:http://download.csdn.net/detail/geoff08zhang/4571358 楼主这么给你说吧,端口号和IP地址是TCP/IP协议需要解析的,所以这两个一定要转换成网络字节顺序。网络对你传输的是什么内容,不感兴趣,就是你将一个结构体强转为char *,接收方再转回来,都能正确的接收结构体,当然进行通信的两个端系统的字节顺序一定要一样,一般都是windows,linux好像也是一样的,印象中MAC OS字节顺序好像和windows不一样! 你的意思,是不是说网络传输时,数据对tcp/IP协议本身是透明的,并不发生转换,我原本认为的网络模型是这样的两个端都是windows,小端,网络传输时大端,那么,网络传输数据之前,会按照自己的大端模型顺序传输数据,那这样等于把windows交给网络的字节流给倒过来了,那么另外一端的windows收到的数据就是逆向的,但是很明显现实不是这样,也就是说网络本身不会管你传什么,也不会颠倒你的字节流顺序,仅仅是在认你给他看的数据时需要遵守它的字节流规则? 数据对协议来说是透明,怎么可能去修改你的数据?关键是协议不知道你是什么数据,比如short和long,大小端转换的时候,显示不一样,所以协议不愿意也不能修改你的数据。所谓大小端传送,无非是解决两端存储方式不相同的问题,如果已经相同,则没有必要。 字节流,不管发送方和接收方什么大端小端,按照字节顺序去看,总是一样的,不需要转换,有谁访问网络的时候还需要关心对方是Windows还是Linux还是Mac?发送顺序1、2、3、4,接收也是1、2、3、4,字节!有问题也不是字节序的原因。 vc++编译kernel mode driver 怎么设置 关于socket的数据包发送 等待重叠IO 返回错误6:句柄无效。 怎样拿到程序调用的ActiveX控件里面的一些基本控件,按钮、文本框之类的句柄 ACTIVEX 控件在RichEditCtrl中响应鼠标消息 vs2008如何编写ocx 我的主线程控制以及子线程同步的问题 sos,救救弱女,谢谢各位大虾了!!! winsock的异步版本是什么意思? 请问ReleaseDC和DeleteObject都该什么时候用啊?他们有什么区别啊? 看到一段代码,不是很懂 一个关于CTabCtrl的问题
IP地址一般是字符串形式转为网络字节序(是有转的,inet_addr返回值已经是网络字节序的了)而send和recv一般是用户自定义数据,没规定要网络字节序
平时用的服务端和客户端都是运行在同一类型的操作系统(windows),
如果在不同的系统里(windows和linux),就可能体现出字节序的影响
http://download.csdn.net/detail/geoff08zhang/4571358
你的意思,是不是说网络传输时,数据对tcp/IP协议本身是透明的,并不发生转换,我原本认为的网络模型是这样的两个端都是windows,小端,网络传输时大端,那么,网络传输数据之前,会按照自己的大端模型顺序传输数据,那这样等于把windows交给网络的字节流给倒过来了,那么另外一端的windows收到的数据就是逆向的,但是很明显现实不是这样,也就是说网络本身不会管你传什么,也不会颠倒你的字节流顺序,仅仅是在认你给他看的数据时需要遵守它的字节流规则?
关键是协议不知道你是什么数据,比如short和long,大小端转换的时候,显示不一样,所以协议不愿意也不能修改你的数据。
所谓大小端传送,无非是解决两端存储方式不相同的问题,如果已经相同,则没有必要。