小弟初学网络编程,写了一个很简单的基于udp的程序,客户端发个字符串(由键盘输入)给服务端,服务端收到后显示出来。服务端运行在linux下面,客户端是win32控制台程序,用sendto发送键盘输入的字符串,服务端正常收到。为了使客户端有个图形界面我创建了个基于对话框的mfc程序,加了个编辑框控件和一个发送按钮,没有使用mfc封装好的socket类,和控制台程序一样使用了socket api,现在的问题是:在编辑框控件里输入字符串,然后点击发送,服务端并没有收到,我检查了sendto的返回值,是发送的字节数。于是我不停的按发送按钮,按了一会服务端就收到了一大堆重复的字符串。请问这是什么原因?程序只是从win32 console变成了mfc程序,主要代码没有改动,结果就不同了。希望大家帮我找到原因,谢谢!

解决方案 »

  1.   

    UDP协议应该不会有这样的问题,TCP可能会出现粘包的情况!
      

  2.   

    仔细检查你的代码。
    还有UDP有可能丢包,但一般来说丢包率会很低。
      

  3.   

    首先感谢楼上诸位大侠对本人问题的关注。
    问题解决了,不是很懂。我发现console程序中,用fgets获取键盘输入的字符串,假设输入的是“abc”,实际得到的是'a','b','c','\12','\0',  \12(八进制)是个控制字符LF(line feed),
    好像和换行差不多。我在mfc程序里把从编辑框得到的字符串后面加了个'\12',就正常了。水平太菜,又碰到一个问题,服务端将收到的字符串回送,客户端调用recvfrom怎么没有阻塞啊? 直接返回SOCKET_ERROR,看了一下WSAGetLastError 返回0, recvfrom不是默认阻塞的吗?用ioctlsocket设成阻塞没用,linux下面就是阻塞的,头都大了。