本帖最后由 VisualEleven 于 2012-02-27 11:45:29 编辑

解决方案 »

  1.   

    我试试, 我想问问 是不是发送int数值 直接发过去是不是存在本地字节序和网络字节序问题?
       难道我发送的东西也要手动转化为网络字节序?
       
      

  2.   

    字节序会让一个数从非零变成零?!应该是recv函数出错了!int iLinkNumber = 0 ;
    recv(SockClient ,(char*)&(iLinkNumber) , sizeof(int) , 0);把上面的0改为其它,比如100,如果结果还是iLinkNumber变成了0,才能说明你真的收到了0,如果保持100,说明你根本就没有收到数据。
      

  3.   

    网络编程中,也与是不是字符串无关!还是看看recv的返回值吧,如果没有出错(大于0),还得保证它等于4,这才证明你收全了。
      

  4.   

    这个已经去定了 
    我改为10  接受后依然是0 ;但是recv返回值确实是4
    继续求助?
    我感觉是网络字节的问题?
    但是我怎么把一个整型转换为网络字节?
    而且还有一个问题,我是在本地主机同时运行两个的 
    确定发字符串是没问题
      

  5.   


    请问发送的数据需要手动转换为网络字节吗?
    如果要转换,具体怎么转?
    为什么发字符串就没有问题?我可以很确定发送的时候确实是1 ,但是接收方收到就是0 返回值是4,表明确实是收到了一个INT
      

  6.   

    我也可以确定的告诉你  肯定不是字节序的问题.....假设int n = 1,char *pBuf = (char *)&n windows(小端)下是存的是 01 00 00 00这时候你把send(socket,pBuf,4,0)发出去的就是01 00 00 00这时候如果是linux(大端)下recv(socket,pBuf,4,0) 接收的是01 00 00 00  这时候n就不是1而是0x01000000;无论什么字节序都不是你现在这个结果  所以别在提字节序...
      

  7.   

    仔细看看自己的代码   别想当然...  自己用socktool分别测试服务端和接收端 就知道是那里出问题了
      

  8.   

    传送short\long数据时肯定要考虑字节顺序的,在传输之前要htonl转换下
    字符串则不用
      

  9.   

    把int格式化为字符串,然后发送。
    接收后用atoi啊
      

  10.   

    数据应该是正常收下来了。格式对应有问题,加上下面句试试:iLinkNumber=(iLinkNumber&0xff00)>>8;