资料显示,网络传输都是大字节序,而x86是小字节序,所以在建立连接的时候,必须把端口号给转了,但是很奇怪的是,为什么其他的都不需要,包括IP地址,包括我用send resv传送数据都不需要,这是为什么?

解决方案 »

  1.   

    IP和端口是协议用到的,标准是网络字节序(大端)
    IP地址一般是字符串形式转为网络字节序(是有转的,inet_addr返回值已经是网络字节序的了)而send和recv一般是用户自定义数据,没规定要网络字节序
    平时用的服务端和客户端都是运行在同一类型的操作系统(windows),
    如果在不同的系统里(windows和linux),就可能体现出字节序的影响
      

  2.   

    IP和端口都是网络字节序,connect后就把这些信息记住了,这后不用再传。建议找本网络编程书看看,如《WinSock网络编程经络》,例子:
    http://download.csdn.net/detail/geoff08zhang/4571358
      

  3.   

    楼主这么给你说吧,端口号和IP地址是TCP/IP协议需要解析的,所以这两个一定要转换成网络字节顺序。网络对你传输的是什么内容,不感兴趣,就是你将一个结构体强转为char *,接收方再转回来,都能正确的接收结构体,当然进行通信的两个端系统的字节顺序一定要一样,一般都是windows,linux好像也是一样的,印象中MAC OS字节顺序好像和windows不一样!
      

  4.   


    你的意思,是不是说网络传输时,数据对tcp/IP协议本身是透明的,并不发生转换,我原本认为的网络模型是这样的两个端都是windows,小端,网络传输时大端,那么,网络传输数据之前,会按照自己的大端模型顺序传输数据,那这样等于把windows交给网络的字节流给倒过来了,那么另外一端的windows收到的数据就是逆向的,但是很明显现实不是这样,也就是说网络本身不会管你传什么,也不会颠倒你的字节流顺序,仅仅是在认你给他看的数据时需要遵守它的字节流规则?
      

  5.   

    数据对协议来说是透明,怎么可能去修改你的数据?
    关键是协议不知道你是什么数据,比如short和long,大小端转换的时候,显示不一样,所以协议不愿意也不能修改你的数据。
    所谓大小端传送,无非是解决两端存储方式不相同的问题,如果已经相同,则没有必要。
      

  6.   

    字节流,不管发送方和接收方什么大端小端,按照字节顺序去看,总是一样的,不需要转换,有谁访问网络的时候还需要关心对方是Windows还是Linux还是Mac?发送顺序1、2、3、4,接收也是1、2、3、4,字节!有问题也不是字节序的原因。