检查一下send()的返回值及客户端的receive()的返回值。
(甚至应该检查Socket()是否创建成功)。查看一下有没有错误发生。

解决方案 »

  1.   

    如果服务器端的send()函数确实没有错误,那么就应该检查客户端的接收数据部分程序是否正确。在服务器发送数据时,客户端处于监视状态吗?
      

  2.   

    用 Socket 发送/接收数据和写入/读取文件内容的模式是一样的;没有资料说 WinSock API 是线程安全的,所以多个线程同时调用 send/recv 的安全性不能保证。本人的做法是用单一一个线程发送数据,大概做法是:设置一个数据队列(比如说:单项链表),其他采集数据的线程把要发送的数据块附加到这个队列,然后发送数据的那个线程从这个队列中取走一个数据块发送出去。当然,这个队列要用线程同步机制来保护。本人刚开始用 Socket 的时候也很困惑,但是如果能理解 Socket 通信在最高一层(我的意思是各种底层通信协议所作的工作就是要使发送/接收数据看起来是“按先后顺序的”)上实际是发送/接收一个数据流(大多数由特定的格式),那么所有问题都会显得简单多了。当然,还有和多具体的技术细节问题,能归纳的最重要有:
    1、send 不确保发送出去全部的数据,函数返回实际发送的数据的字节数;所以,程序要检查返回值来发送剩余的数据(用一个循环就可以了);
    2、争取执行关闭过程,这个在 MSDN 上有详细的说明,参考 shutdown 的说明会得到这方面的连接。希望对你有所启发哦。
      

  3.   

    察看你的send函数返回的字节数是否正确
      

  4.   

    send函数的返回值是-1,但是另外一个程序也是同样的原理程序运行正常,客户端可以收到数据
      

  5.   

    Return Values
    If no error occurs, send returns the total number of bytes sent, which can be less than the number indicated by len for nonblocking sockets. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError.
    你WSAGetLastError一下看看错误码然后通过error lookup看看是什么错误
      

  6.   

    http://www.csdn.net/expert/topic/544/544226.xml
      

  7.   

    http://www.csdn.net/expert/topic/544/544226.xml
      

  8.   

    客户端调用WSAGetLastError看看是什么错误