java客户端与C#服务端socket通信

lxglhxjll 2011-06-28 03:08:33
服务端已经写好不能改。报文格式也定了。
由于java的byte型和c#的byte范围不一样,导致我发送的某些数据服务端接受到的格式有错。
而且out.write(char[] ch)这个方法,虽然java的char范围和c#的byte一样,但是,发送的时候好像客户端还是会先转成byte[]再发送,这样数据还是不对。
比如我的校验位是ch[0]=127。这发送没问题,服务器收到的也是127.但如果ch[0]=129,超过了byte的最大128,就会先拆分,这样服务器收到的变成了[194,129]。报文整个就不对了。
怎么解决这个问题呢,刚接触socket变成,很多东西不懂,求指导。
...全文
291 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangyulc 2011-11-17
  • 打赏
  • 举报
回复
困扰一周的问题终于解决了!原来我这个问题主要是Java接收机制和C#的不同:Java服务器端接收时要等一个回车符:"\n",否则就会死在那里等着,而C#的服务器端则不会,所以C#的客户端发送字符串时,需要在协议之外附加一个:"\n",这样Java服务器端就能正常接收了!由于对Java只是略懂,不知道其中原因,请大家明白的给解释一下。
zhangyufly 2011-11-16
  • 打赏
  • 举报
回复
我遇到的问题正好和楼主相反:Java服务器端与C#客户端socket通信,现在关键在于C#中socket类中的关于异步通信接口中的BeginSend方法,无一不是byte[],没有char[]这种参数输入,这就无法避免从string类型到byte[]的转化:System.Text.Encoding.Default.GetString(),这里的Default也好,改用UTF8等其他6种也罢,都得先选择一种编码类型,而无论你选择那一种,到了Java服务器端都无法正确识别(我试了所有编码),这个问题能否在C#语言中解决,请给出一个思路。是不是只有一种出路:用C++重写一遍,直接用char[]参数传入了事?真令人头疼,微软到底是咋想滴,搞不明白呀!
iambic 2011-06-28
  • 打赏
  • 举报
回复
贴代码吧。你没说清楚。虽然能猜出来基本问题在哪里。你写数据的时候写的不是字节流,而是字符串(或者字符流)。

另外还是你的协议描述的太差了。基本没任何参考价值。好一点的描述能让人据此写出实现。而我连你的数据是文本数据还是结构化数据都看不出来。
lxglhxjll 2011-06-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 iambic 的回复:]
那么,out.write(char[]),如果char[]的内容是{'h', 'e', 'l', 'l', 'o'},实际传出去的数据是什么(也就是out.write这个操作会打印那些字节到socket里)?
没看明白你的协议。
[/Quote]

最终服务端收到的是[104,101,108,108,111]这里应该是对的。

这个协议是针对一条报文的,其中中【数据单元格式】这个是对【报文内容】中【数据】的具体解释。
iambic 2011-06-28
  • 打赏
  • 举报
回复
那么,out.write(char[]),如果char[]的内容是{'h', 'e', 'l', 'l', 'o'},实际传出去的数据是什么(也就是out.write这个操作会打印那些字节到socket里)?
没看明白你的协议。
lxglhxjll 2011-06-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 iambic 的回复:]
你的协议是啥样子的?你了解out.write(char[])输出的每一个字节的含义吗?
[/Quote]

报文头分隔符 7e7e7e7e【4位】
报文头 检验位【1位】+头数据【88位】
报文内容 检验位【1位】+数据字段数【1位】+数据
报文尾分隔符 7f7f7f7f【4位】

数据单元格式 数据类型【1位】+数据长度【2位】+数据

协议是这样的。每个字节含义也都知道的
iambic 2011-06-28
  • 打赏
  • 举报
回复
你的协议是啥样子的?你了解out.write(char[])输出的每一个字节的含义吗?

50,502

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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