小弟初学网络编程,写了一个很简单的基于udp的程序,客户端发个字符串(由键盘输入)给服务端,服务端收到后显示出来。服务端运行在linux下面,客户端是win32控制台程序,用sendto发送键盘输入的字符串,服务端正常收到。为了使客户端有个图形界面我创建了个基于对话框的mfc程序,加了个编辑框控件和一个发送按钮,没有使用mfc封装好的socket类,和控制台程序一样使用了socket api,现在的问题是:在编辑框控件里输入字符串,然后点击发送,服务端并没有收到,我检查了sendto的返回值,是发送的字节数。于是我不停的按发送按钮,按了一会服务端就收到了一大堆重复的字符串。请问这是什么原因?程序只是从win32 console变成了mfc程序,主要代码没有改动,结果就不同了。希望大家帮我找到原因,谢谢!
解决方案 »
- VS2008中的Pop-up Menu组件去哪里找?
- 用户在桌面上双击某个图标,我们能不能获取到用户双击的哪个程序?
- 求问EDIT 控件
- 2000下如何使用unicode
- 我用ATL Server写的WebService部署到非开发服务器上不能用,不知为什么?
- 关于DrawDibDraw()的全屏显示图像
- 高手请看下面一段代码,为何出现"Access Violation"错误?(高分求救)
- 想在toolbar里放个“打印预览”的按钮
- 再问大家怎样保存IE历史记录(History目录)?
- 业余的程序员(灌水篇)
- 基于对话框派生一个新类,想在缺省构造函数中增加1个CString变量,该怎么操作
- VC下使用ADO数据库时,怎么动态连接
还有UDP有可能丢包,但一般来说丢包率会很低。
问题解决了,不是很懂。我发现console程序中,用fgets获取键盘输入的字符串,假设输入的是“abc”,实际得到的是'a','b','c','\12','\0', \12(八进制)是个控制字符LF(line feed),
好像和换行差不多。我在mfc程序里把从编辑框得到的字符串后面加了个'\12',就正常了。水平太菜,又碰到一个问题,服务端将收到的字符串回送,客户端调用recvfrom怎么没有阻塞啊? 直接返回SOCKET_ERROR,看了一下WSAGetLastError 返回0, recvfrom不是默认阻塞的吗?用ioctlsocket设成阻塞没用,linux下面就是阻塞的,头都大了。