免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3289 | 回复: 9
打印 上一主题 下一主题

用unix c做为socket服务端,用java做为socket客户端,出问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-05-29 11:53 |只看该作者 |倒序浏览
我现在通讯方式是命令行方式,就是说每次发送一个字符串,如下面
客户端iSendLen=send(iRecvFd,sSendBuf,sizeof(sSendBuf),0) ;
服务端iRecvLen = recv(iRecvFd,sRecvBuf,sizeof(sRecvBuf),0);
我原来socket的客户端是用unix c写的,没有问题。
现在我把socket改成了java写的,如下面的代码:
sCmdStr="SEQUNCE=1111,RGLGN:USERNAME=aaaa,PASSWORD=admin;";
socketWriter.writeBytes(sCmdStr);
socketWriter.flush();
我发现服务器读的时候要分好几次读的
本来一次就够了,这是怎么回事?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2003-05-29 12:26 |只看该作者

用unix c做为socket服务端,用java做为socket客户端,出问题?

你是说这一条数据?

应该不会有区别呀

论坛徽章:
0
3 [报告]
发表于 2003-05-29 13:31 |只看该作者

用unix c做为socket服务端,用java做为socket客户端,出问题?

是的,我客户端只发送了一个字符串一次,但是服务端分了两次
我的客户端是windows,服务器端是unix的
比如我有一个字符串SEQUNCE=1111,RGLGN:USERNAME=00010001,PASSWORD=admin;
服务器可能这样接收SEQUNC
E=1111,RGLGN:USERNAME=00010001,PASSWORD=admin;
第二次可能这样接收SEQUNCE=
1111,RGLGN:USERNAME=00010001,PASSWORD=admin;
而且第次的接收都不一样,真是怪了,请高手指点!!!!

论坛徽章:
0
4 [报告]
发表于 2003-05-29 13:57 |只看该作者

用unix c做为socket服务端,用java做为socket客户端,出问题?

我也碰到过同样的问题。客户端发送的一个数据包,服务器接受时分几次!

解决方法,在数据包中加上数据包的长度。程序中,让服务器一直接收到足够的字节数后,再开始后续操作!

论坛徽章:
0
5 [报告]
发表于 2003-05-29 14:25 |只看该作者

用unix c做为socket服务端,用java做为socket客户端,出问题?

在数据包中加上长度?
我现在主要是可能被操作系统自动的分成了两个数据包,我加在包中的长度
也只能是放在一个数据包中了,怎么办?

论坛徽章:
0
6 [报告]
发表于 2003-05-29 14:41 |只看该作者

用unix c做为socket服务端,用java做为socket客户端,出问题?

而且我本身发送过去的数据服务端就没有接收好
我发送过去的长度字段也不能保证他接收好啊
我不知道是不是我的程序有问题了,这个还好解决
如果是操作系统的问题,那就麻烦了

论坛徽章:
0
7 [报告]
发表于 2003-05-29 15:04 |只看该作者

用unix c做为socket服务端,用java做为socket客户端,出问题?

缺省情况下,如果你想读1024字节,但是对方只写过来一个字节,那么这次读调用返回1,也就是说读过来1个字节。但是如果对方一个都没写过来,那么会阻塞。
   问题在于你读的那一萨那,本地tcp缓冲区中只有部分数据。这想根java的类的内部是怎么实现的有关系。

   一般情况下,如果想读一个固定长度字节,应该采用循环读入判断返回值的手法.或者在本地增加读写缓冲区。一次行读入很多到本地缓冲这样会很块的。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2003-05-29 15:11 |只看该作者

用unix c做为socket服务端,用java做为socket客户端,出问题?

楼上的兄弟。换个头像吧,我受不了了!  

论坛徽章:
0
9 [报告]
发表于 2003-05-29 15:13 |只看该作者

用unix c做为socket服务端,用java做为socket客户端,出问题?

这个头像是我的最爱。吐习惯了就好了:)

论坛徽章:
0
10 [报告]
发表于 2003-05-29 15:41 |只看该作者

用unix c做为socket服务端,用java做为socket客户端,出问题?

固定长度是什么意思
我现在发送的指令是有限制的,比如1024,但是每次发送的字符串
的长度当然是不一样的,怎么解决?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP