社区
Web 开发
帖子详情
socket UDP连接问题求帮助,急急急!!!
yangxuebao123
2011-04-13 05:15:31
问题如下,
.net客户端发送的数据包是用bitConvert编译后发送过来的 。
我用java抓取包以后, 不知道 怎么转码了,求大家帮帮我 ,很急
...全文
117
20
打赏
收藏
socket UDP连接问题求帮助,急急急!!!
问题如下, .net客户端发送的数据包是用bitConvert编译后发送过来的 。 我用java抓取包以后, 不知道 怎么转码了,求大家帮帮我 ,很急
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
20 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yangxuebao123
2011-04-14
打赏
举报
回复
没有,关键是数据解析不出来了 , byte类型的数组解析出来还是乱的
用java .net都一样。
原来
2011-04-14
打赏
举报
回复
设备供应商提供的接口肯定没有问题,关键是用好
yangxuebao123
2011-04-14
打赏
举报
回复
这就是协议, 给你看看
使用UDP传输协议
传输数据格式如下:
1.GPS基础数据
10代表GPS数据,终端ID号11位,经度,纬度,日期时间,方向角,速度
10,16400015665,421725569,112269221,2010-6-2 11:05:05,123,0
终端ID号,11位,唯一标识终端
经纬度为int型,转double: double dx=(double)421725569 / 1024 / 3600;double dy=(double)112269221 / 1024 / 3600;
GPS方向角和速度都为int型
如:UDP监听接收到byte[] array
string RecieveStr=System.Text.Encoding.UTF8.GetString(array);
则RecieveStr的值的格式同“16400015665,421725569,112269221,2010-6-2 11:05:05,123,0”
2.报警数据
11代表GPS数据,终端ID号11位,经度,纬度,日期时间,方向角,速度
11,16400015665,421725569,112269221,2010-6-2 11:05:05,123,0,紧急报警
基础信息同上,后面多了报警信息描述“紧急报警”
yangxuebao123
2011-04-14
打赏
举报
回复
设备供应商完全忽悠我 , 我们在 开发GPS接收程序。
ChDw
2011-04-14
打赏
举报
回复
到底方法是什么啊。你怎么老变?
如果是
BitConverter.ToString(buffer, 0, readBytes).Replace("-", ",");
就是
String str = "5C6263";
byte[] b = new byte[str.length() / 2];
for(int i = 0; i < b.length; i++) {
char h = str.charAt(i * 2);
char l = str.charAt(i * 2 + 1);
int v = (h >= 'A' && h <= 'F') ? (h - 'A' + 10) : (h - '0');
v = (v << 4) | ((l >= 'A' && l <= 'F') ? (l - 'A' + 10) : (l - '0'));
b[i] = (byte) v;
}
System.out.println(Arrays.toString(b));
如果再需要将b转换成字符串,就new String(b,"UTF-8");
yangxuebao123
2011-04-14
打赏
举报
回复
按照你说的方法还是乱码。。
他说解码的方法是BitConverter.ToString(buffer, 0, readBytes).Replace("-", ",");
JAVA,我真的不知道怎么解了。
ChDw
2011-04-14
打赏
举报
回复
不应该有问题的,应该是你代码有问题
.net中
byte[] b = System.Text.Encoding.UTF8.GetBytes("The测试");
生成字节数组
{84,104,101,230,181,139,232,175,149}
在Java中
byte[] b = {84,104,101,(byte) 230,(byte) 181,(byte) 139,(byte) 232,(byte) 175,(byte) 149};
System.out.println(new String(b, "UTF-8"));
也是打印The测试的
可能是你没有注意
DatagramPacket packet
packet.getOffset()/getLength()属性,你拿出了多余的字节了
所以应该是new String(packet.getData(), packet.getOffset(), packet.getLength(), "UTF-8");
yangxuebao123
2011-04-14
打赏
举报
回复
Th @ 8B?
叱?
@ ? 7
乱码就是这样 。。
他是用.net 设置成byte类型的 包, 我 解不出来了
yangxuebao123
2011-04-14
打赏
举报
回复
[Quote=引用 19 楼 chdw 的回复:]
这些都是非常简单的转换而已,你还是找本书看看吧
String str = Integer.toString(Integer.parseInt(oldNum, 16));
return str.length() < 2 ? ("0" + str) : str;
[/Quote]
我自己解决了
ChDw
2011-04-14
打赏
举报
回复
这些都是非常简单的转换而已,你还是找本书看看吧
String str = Integer.toString(Integer.parseInt(oldNum, 16));
return str.length() < 2 ? ("0" + str) : str;
yangxuebao123
2011-04-14
打赏
举报
回复
java中怎么转啊, .net是这样toInt32
yangxuebao123
2011-04-14
打赏
举报
回复
54,68,00,00,40,00,01,38,42,00,39,17,18,0b,04,0e,05,27,29,03,df,ad,e0,0c,ea,12,d0,00,00,00,00,00,00,00,00,00,07,06,9f,0d,0a
public string ChangeNum(string oldNum)
{
return Convert.ToInt32(oldNum, 16).ToString().PadLeft(2,'0');
}
yangxuebao123
2011-04-13
打赏
举报
回复
[Quote=引用 7 楼 luman2002 的回复:]
直接用toString()转不可以吗?
StringBuffer sMessage = new StringBuffer();
sbMessage.append(new String(getByteMessage,"UTF-8"));//getByteMessage是Socket收到的字节类型数据
String s = sbMessage.toString();
尝试一下
[/Quote]
尝试过了的, 是乱码
luman2002
2011-04-13
打赏
举报
回复
直接用toString()转不可以吗?
StringBuffer sMessage = new StringBuffer();
sbMessage.append(new String(getByteMessage,"UTF-8"));//getByteMessage是Socket收到的字节类型数据
String s = sbMessage.toString();
尝试一下
yangxuebao123
2011-04-13
打赏
举报
回复
我说错话了 ,那个 人说用.net 就一句代码 , System.Text.Encoding.UTF8.getString(array)
你帮我想想,怎么样把那个字节类型的 转换为String类型的。
ChDw
2011-04-13
打赏
举报
回复
不明白你的用法,你说UDP传输那应该是byte[]的传输啊,怎么会用ToString?
如果是ToString,对应Java也非常简单啊
string str = BitConverter.ToString(...);
在Java中解释就是
String str = "5C-62-63";
byte[] b = new byte[(str.length() + 1) / 3];
for(int i = 0; i < b.length; i++) {
char h = str.charAt(i * 3);
char l = str.charAt(i * 3 + 1);
int v = (h >= 'A' && h <= 'F') ? (h - 'A' + 10) : (h - '0');
v = (v << 4) | ((l >= 'A' && l <= 'F') ? (l - 'A' + 10) : (l - '0'));
b[i] = (byte) v;
}
yangxuebao123
2011-04-13
打赏
举报
回复
BitConverter.toString();
主要是解析这句话。,。
yangxuebao123
2011-04-13
打赏
举报
回复
你这个值能转double
我里面还有其它类型的了, 怎么办啊, 还有String类型的 。。
ChDw
2011-04-13
打赏
举报
回复
这个要看你在.net中是将什么转换成byte[]了
一般的double、long等都是按逆序处理而已
例如在.net中byte[] b = BitConverter.GetBytes(1.23);
会得到
174,71,225,122,20,174,243,63
这8个字节
在Java中处理
byte[] b = {
(byte) 174,71,(byte) 225,122,20,(byte) 174,(byte) 243,63
};
long l = 0;
for(int i = b.length - 1; i >= 0; i--)
l = (l << 8) | (b[i] & 0xFF);
System.out.println(Double.longBitsToDouble(l));
yangxuebao123
2011-04-13
打赏
举报
回复
会的请回答,全分相送, 感激不敬
java中
socket
连接
不上_java
socket
编程 服务器和客户端程序都
连接
不上,
急
急
,谢谢,好人好报...
客户端程序代码:...
Socket
socket
;publicClient
Socket
Frame(){setTitle("建立客户端套接字");setDefaultCloseOperation(J...客户端程序代码:public class Client
Socket
Frame exte...
[delphi教程]delphi开发教程全攻略(1)
如何在Image上提示字符?...
急
急
急
!!!网络数据通讯
问题
(多线程如何解决???) 关于保存一个Record类型到文件中的
问题
如何使窗体在用户按下显示桌面之后不会隐藏(不是将它始终置前)谢谢各位 大家好,请D
急
急
如律令!火速搭建一个C#即时通信系统!(附源码分享——高度可移植!)...
想都别想,写即时通讯总不能从
socket
写起啊,那样写出来的东西只能读书的时候当作业交给老师看下,然后记一个平时成绩,给领导看那就是找抽! 所以,只能“登高而招,顺风而呼”,园子里大神多,资源也多,找...
基础
各位兄弟,在SDK编程中如果实现...
求
助:通过编程DirectX抓屏------>masterz:再麻烦你一下,谢谢熟悉RichEdit的朋友过来看一下,RichEdit的几个
问题
.如何对 I/O 端口进行操作?有了该
问题
就有了思考(100分 献礼!)如何
网络IO并发的底层分析
大部分的
socket
接口都是阻塞型的。所谓阻塞型接口是指系统调用(一般是IO接口)不返回调用结果并让当前线程一直阻塞,只有当该系统调用获得结果或者超时出错时才返回。select系统调用是用来让我们的程序监视多个文件...
Web 开发
81,092
社区成员
341,718
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章