CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

WinSocket发送消息时能传递非字符数据吗?

楼主realcedar(void)2000-10-24 10:52:00 在 VC/MFC / 基础类 提问

    send   (SOCKET   s,const   char   FAR   *   buf,   int   len,int   flags);  
  如果定义如下联合,现对结构体(MSG.DATA)赋值,然后buf指向MSG.charbuf()  
  发送出去的数据会残缺不全,为什么呢?  
        union   MSG{  
                struct   DATA   abc;     //结构体数据,包括字符型、整形等数据项  
                char   charbuf[100];         //charbuf数组,长度与结构相同  
        }  
          关键时其中的整形数据接收不到,不知各位大侠有无这样的经历啊,  
  如何解决的呢?还请赐教啊!  
    问题点数:50、回复次数:14Top

1 楼tigerjade(tigerjade)回复于 2000-10-24 11:01:00 得分 10

不用做这样的union吧,直接进行强制类型转换。但是需要注意的是网络字节序和主机字节序之间的转换。  
  char   *实际上是指向内存块的一个指针,并不是说这个指针只能是char类型。整型数据因为包括多个字节,因此需要进行字节顺序的转换。  
  Top

2 楼realcedar(void)回复于 2000-10-24 16:45:00 得分 0

      我最先就是用强制类型转换试验的,但是有一个问题就是:发送的时候,  
  发送全字符型数据是可以的,若是有整形数据,他就会从整形开始的地方  
  截断,所以发送出去的数据是不完整的。  
  Top

3 楼realcedar(void)回复于 2000-10-24 16:54:00 得分 0

      我最先就是用强制类型转换试验的,做了union实际上是一样的  
  但是都有有一个问题就是:发送的时候,发送全字符型数据是可以  
  的,若是有整形数据,他就会从整形开始的地方截断,所以发送出  
  去的数据是不完整的。  
          比如说   long   i;   那么   i   =   8   时,它要占用4个字节,如果  
  我没记错的话应该是0080。所以发送是一碰到前面的0就会截断。  
  why???  
  Top

4 楼kp(老妖)回复于 2000-10-24 16:57:00 得分 0

看看MSDN的例子,里面有一个Chat程序,不知道对你有帮助没有!?Top

5 楼dingsg(丁丁)回复于 2000-10-24 17:23:00 得分 20

你的问题的关键是:  
  1>char与int   之间存在字结束的差异!  
  2>网络的传输方式引起了你的问题!  
  :::当同步传输时,你的问题不会存在!  
  :::能出现如此问题,我断言此时你的程序使用异步传输模式的!  
  3>解决这个问题;  
      在你的结构或者Union中在添加两个或者一个char指针,用于存放int(两倍的char   字节)   数据!  
  :::  
  此时我想问题应该可以解决啦  
  OK?  
  Top

6 楼tigerjade(tigerjade)回复于 2000-10-24 18:07:00 得分 5

应当不会出现这种情况吧,你只要在len参数中指定sizeof(long),就会把四个字应都发送出去。我以前用这种方式没有问题啊。Top

7 楼ning7608(小牛)回复于 2000-10-24 19:59:00 得分 10

用GloabalLock将其锁定,然后取得handle   的地址,就可以用了Top

8 楼realcedar(void)回复于 2000-10-26 11:24:00 得分 0

        谢谢各位的解答,受益非浅。Top

9 楼dingsg(丁丁)回复于 2000-10-26 13:35:00 得分 0

我的分析:  
  我想你的通信方式是异步方式的!同步应该不会有这个问题的!  
  问题的解决:  
  1>发送前把整数分成两部分:高位与低位,用char型  
  2>收到后,把高位与低位(用char型)转成相应的整数!  
  OK?  
  丁丁Top

10 楼meifen(meifen)回复于 2001-07-13 15:29:09 得分 0

4Top

相关问题

  • jsp中页面间传递数据,字符编码问题
  • 关于winsocket中传递字符串的问题
  • 急切的问:怎么将表单传递的字符数据添加到数据库的int字段???谢谢!!
  • 两个Oracle数据库,字符集不一样,怎样在这之间传递数据而不产生乱码?
  • 字符串传递问题
  • 为什么ODBC和VC传递的字符串数据不能长于255?有办法解决吗?
  • 如何实现通过字符联接来实现页与页之间传递数据
  • 如何通过类传递字符串
  • 如何传递这个字符串值?
  • 字符串中有“+”怎么传递?

关键词

  • 数据
  • 字符
  • 指针
  • 转换
  • 结构
  • 解决
  • 整形
  • charbuf
  • 发送
  • 截断

得分解答快速导航

  • 帖主:realcedar
  • tigerjade
  • dingsg
  • tigerjade
  • ning7608

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo