JAVA 与C SOCKET连接传输数据格式的问题,调试了很多办法。偶没折了。

johndiyang 2006-05-27 05:48:00
程序是基与TCP的SOCKET连接,

下面是JAVA客户端的相关程序:
//数据定义
short idl=1,adl=16,dal=8;
data1=new DataTable(idl,adl,dal);//数据全部初始为0
data1.ad[0]=5.0f;
data1.ad[1]=37.7f;
data1.ad[2]=9.35f;
data1.ad[3]=73.0f;
data1.ad[5]= 33.63f;
data1.da[0]=20.0f;
data1.da[5]=38.3f;
data1.da[7]=7.56f;
//数据发送
out.writeUTF("DATA"); out.flush();
out.writeShort(data.id); out.flush();
out.writeShort(data.adl); out.flush();
out.writeShort(data.dal); out.flush();
float temp;
for(int i=0;i<data.adl;i++){
temp=data.ad[i];
if(temp!=0.0) temp+=add;
out.writeFloat(temp);
out.flush();
}
下面是我的接受程序,LINUX C
char buf[20];
int r=read(client_sockfd,buf,sizeof(buf));
buf[r]='\0';
for(count=0;count<3;count++;){
r=read(client_sockfd,&temp,sizeof(int));
id[count]=ntohs(temp);
printf(", %d",id[count]);
}
for(i=0;i<3;i++){
for(j=0;j<id[i];j++){
r=read(client_sockfd,buf,sizeof(buf));
buf[r]='\0';
printf(" %s",buf);
float ff=*(flaot*)buf;
printf(" %f",ff);
}
}

运行的结果一点规律都没有,下面就是部分内容是:
1,16,8

4 @~ 0.000000
8 BI[][]A** -42801728.000000
12 * 0.000000
1 null 0.000000



(前面INT可以正确接收,后面的FLAOT都是乱码或者益处)
( *是黑色方块,[]表示像德语一样的乱码 )

...全文
254 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
johndiyang 2006-05-28
  • 打赏
  • 举报
回复
JAVA不是我做的,一般没有机会修改了

tianfang 2006-05-28
  • 打赏
  • 举报
回复
你们应该有一个自己的通信协议,修改它

现在的协议很不科学,字符串、整数、浮点,混合传输,而且长度不固定

处理浮点的时候,c直接从buf中截取4字节,传给一个float试试
johndiyang 2006-05-28
  • 打赏
  • 举报
回复
此问题已经解决
http://community.csdn.net/Expert/topic/4780/4780723.xml?temp=5.382717E-03
tianfang 2006-05-27
  • 打赏
  • 举报
回复
串行化再传送,最简单就是转换为字符串再传送

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧