java 与 c Socket 通信的问题

ruguosmen 2008-04-24 11:01:16
我现在正在开发一个福建鑫诺的IP话机的项目
IP 话机是用C 写的
我用serverSocket在服务器端监听
可以收到IP 话机的刷卡请求
但是在我回复话机应答的时候话机就收不到我的应答消息
请高手指点

我的发送办法曾经尝试过如下

1. socket.getOutputStream().write("00110499981".getBytes());
2. PrintWriter stdt_sign_recs = new PrintWriter(socket.getOutputStream(),true);
stdt_sign_recs.println("00110499981".getBytes());
3. PrintStream os=new PrintStream( new BufferedOutputStream(socket.
getOutputStream()));
os.write("00110499981".getBytes());
这些方法在本机山都可以获取数据
但是在IP电话里就没有响应.
请高手指点
...全文
161 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
sniperhuangwei 2008-04-25
  • 打赏
  • 举报
回复
用TCPDUMP跟踪网络包的情况,把输出发上来.在win上用windump
ruguosmen 2008-04-25
  • 打赏
  • 举报
回复
用抓包数据抓不到数据 不知道怎么回事
云上飞翔 2008-04-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ruguosmen 的回复:]
socket.getOutputStream().write("00110499981".getBytes());
此操作是对签到请求的回应

包头长为10
即为
0011049998
包体
1
意为正确签到

我的这个回应信息,让厂商看了,他们也确认没错,他们说IP话机只接收ASCII码所以我就回应了BYTES形式.
如果IP话机接收到了我们服务器端发送的回应(00110499981)那么他就会删除IP电话上的这条请求.
但是话机就是不能删除.下次依旧把这个请求发了回来.弄的我的服务器…
[/Quote]
答:按理说,你的代码是没有问题的。但为何IP话机就是你的响应呢?我想关键还是要真正弄清楚IP话机能正确接受的“协议格式”。
 根据你现有的提供的信息,看不出有何问题。实在没有招了,我突发奇想(几乎不大可能),有不少C程序接收ASCII码串时,要求以零字符(ASCII码值为0)结尾,你这个会不会是这样。当然这是“瞎猜”的。也许吧。
以上仅供你参考
我是风 2008-04-25
  • 打赏
  • 举报
回复
getBytes()是通过默认字符集来转换的
试试下面的代码,保证11个字符:
socket.getOutputStream().write("00110499981".getBytes("GBK"));  

duzhonghua 2008-04-25
  • 打赏
  • 举报
回复
学习呵呵,
ruguosmen 2008-04-25
  • 打赏
  • 举报
回复
救命啊!
sniperhuangwei 2008-04-24
  • 打赏
  • 举报
回复
用抓包工具先确定对方是否收到了数据包.
ty8888 2008-04-24
  • 打赏
  • 举报
回复
真是高手如云呀~!!!!!!!!!!
ruguosmen 2008-04-24
  • 打赏
  • 举报
回复
敬请大家关注,帮我参谋参谋!
haoxiongok 2008-04-24
  • 打赏
  • 举报
回复
我也来学习。。。
hmsuccess 2008-04-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 shili150 的回复:]
按字节读取和传送的话应该是没问题的

但是没做过java和c的连接问题

不过用过jndi,调用本地dll的方法,挺不错
[/Quote]
还没用过jni 学习
shili150 2008-04-24
  • 打赏
  • 举报
回复
按字节读取和传送的话应该是没问题的

但是没做过java和c的连接问题

不过用过jndi,调用本地dll的方法,挺不错
ruguosmen 2008-04-24
  • 打赏
  • 举报
回复
socket.getOutputStream().write("00110499981".getBytes());
此操作是对签到请求的回应

包头长为10
即为
0011049998
包体
1
意为正确签到

我的这个回应信息,让厂商看了,他们也确认没错,他们说IP话机只接收ASCII码所以我就回应了BYTES形式.
如果IP话机接收到了我们服务器端发送的回应(00110499981)那么他就会删除IP电话上的这条请求.
但是话机就是不能删除.下次依旧把这个请求发了回来.弄的我的服务器感觉就象个哑巴,只能听,不能说的
气死俺了!
希望大家帮我参谋参谋!

beiouwolf 2008-04-24
  • 打赏
  • 举报
回复
C普遍采用数据包结构来传数据
你先搞清楚他的协议结构
一般C的包前几个字节用来描述的,也就是包头

搞清楚了协议才来写,不然你传过去的数据,对面收了也不做处理
ruguosmen 2008-04-24
  • 打赏
  • 举报
回复
怎么才能保证做到内存位是一致那?
wangwenjun69 2008-04-24
  • 打赏
  • 举报
回复
因为你是往C那边写东西,你需要保证他那边读取的你的内存位是一致的~
iwindyforest 2008-04-24
  • 打赏
  • 举报
回复
没看出道道来...

建议flush一下再看看

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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