7645|10

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

socket用recvfrom接受数据只能收到第一个字符?? [复制链接]

我用recvfrom接收数据,然后用messagebox显示,每次都只显示第一个字符,后面的字符都变成“□”了。
代码如下:
while(1)
{
        numrcv=recvfrom(serverSocket, buffer,
                20, 0, (struct sockaddr *)NULL,(int *)NULL);
        if (numrcv != SOCKET_ERROR)
        {
                MessageBox(NULL,(LPCTSTR)buffer,NULL,NULL);
        }                       
}
而且每次不管发送的数据有多长,后面都只有两个“□”。如“100”,显示是“1□□”,如果发送的是“10000000”,显示的还是“1□□”

最新回复

gz  详情 回复 发表于 2007-6-11 14:14
点赞 关注

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
有谁有过这样的经验吗?或者直到怎么解决,麻烦解答下,在线等,谢谢
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
你看看是不是你字符unicode和asni转换的问题
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

4
 
发送了结束符,应该只是MessageBox(NULL,(LPCTSTR)buffer,NULL,NULL);
可能是把0作为结束符了,你看接收返回值
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
不要用messagebox显示他。
我感觉你的数据应该是对的,要不你直接把buffer的所有位输出来看看,应该是对的。
对了,我觉得你显示buffer还不如显示实际接受到的字节数。搂主你看看,应该是对的。
PS:socket 的 recvfrom是可以用的,这点我用过。
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

6
 
我直接用EditBox显示他,也一样是乱码啊,不知道什么情况,
如果是Unicode和asc的转换,应该怎么做呢?
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

7
 
不是你用什么显示的问题
你的buffer中间有不能显示的字符或者转换有问题.
我建议你先一个字符一个字符的显示buffer中的内容,看是否接收到乐内容。
想转换unicode,使用MultiByteToWideChar
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

8
 
我可以确定我接收到了。
我现在发现这里有问题,我定义一个char str[5]="aaaaa";
然后用SendMessage(GetDlgItem(hDlg,IDC_EDIT5),WM_SETTEXT,NULL,(LPARAM)str);
在EditBox里显示这个str,显示出来也是乱码。所以我想可能是码制转换的问题。
用MultiByteToWideChar转换,代码如下:
int widecharlen=MultiByteToWideChar( //计算从Ansi转换到Unicode后需要的字节数
      CP_ACP,
      MB_COMPOSITE,
      str, //要转换的Ansi字符串
      0, //自动计算长度
      0,
      0
  );
        LPTSTR wstr = new TCHAR(widecharlen);
        MultiByteToWideChar( //从Ansi转换到Unicode字符
      CP_ACP,
      MB_COMPOSITE,
      str,
      5,
      wstr, //转换到tmpstr
      widecharlen //最多转换widecharlen个Unicode字符          
  );
再用SendMessage显示,就什么也不显示了,请问下我使用有什么错误,或者我的想法是不是对的?
麻烦解答下,谢谢
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

9
 
知道了,要把第四个参数换成-1,但是asc里的换行符转换成Unicode后还是乱码啊,就是"\n"
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

10
 
换成"\r\n"行了
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

11
 
gz
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表