android开发tcp客户端循环接收信息,为什么收不到呀

下面是logcat打印出来的信息,显示表明连接没问题,也进入循环了,而且服务器端可以确定发送了信息,服务器端是linux下的socket程序,应该没问题,验证过了,and... 下面是logcat打印出来的信息,显示表明连接没问题 ,也进入循环了,而且服务器端可以确定发送了信息,服务器端是linux下的socket程序,应该没问题,验证过了,android的客户端显示表明阻塞在接收信息部分,求教了! 展开
 我来答
百度网友4082f721f
2014-03-24 · TA获得超过171个赞
知道小有建树答主
回答量:246
采纳率:100%
帮助的人:163万
展开全部
InputStream reader = socket.getInputStream()
byte[] bbuf = new byte[1000];
int count = reader.read(bbuf);
把读取数据的方式改成这种试试,怕是你使用readline()方法的时候接收不到最后的“回车换行符”导致的。
追问

换成上面哪呀可以收到数据,可完全不是自己要的呀?

我发的是Gps信号 完全不是自己要的,麻烦指正

追答
先回答你那个字符串“\n”结尾的问题,在不同的编程语言对于字符串的处理内容是不一样的,比如结尾符号等等,但是作为socket通信来说只是传递真实的数据内容本身,并不会考虑所谓的c/c++的"\n"结尾这部分内容,也就是说对于读取内存数据发送给socket的时候,指针移动到"\0"就不会往下了。

以上这段话存属显摆,跟你遇到的问题没什么关系。

然后回答你收不到数据的问题,根据你的描述以及你跟另一个人的讨论可以得出,证实了我先前的判断,你之所以在Android端收不到数据,的确是因为你使用的输入流的读取方法是readline(),而这个方法是强制以收到了"\n"为数据结束的标志符,这点你可以查一下Android或者Sun JDK的API说明就能明白了,所以当你手动加入“\n”后才能收到数据。

最后,回答你按照我的建议修改的代码收到数据了但是打印出来根本不是你想要的结果的问题,你仔细看看你的打印信息的语句“System.out.println("msg:" + bbuf);”,这个语句会强制调用bbuf这个对象的toString()方法,然后将返回结果与"msg:"拼接并打印出来,而JAVA的数组对象的toString方法是返回这个对象在JVM中的对象ID号,所以才会出现截图中你看不懂的那些输出信息。所以得出结论是你现在真实的收到数据了,但是没有将字节数组转化成你所需要的字符串而已,那现在就简单了,解决一个问题就行了,将字节数组转化成字符串,这个找度娘你能搜索到一大批的方法,我这这里就不给多说了,你就baidu关键字“java 将字节数组转化成字符串”就行了。

其实以上这些都是最基本的知识,哥们基础要扎实一些才好呢!
匿名用户
2014-03-24
展开全部
你的服务器端是怎么输出数据的……
追问

sbuf中开始没有\n结束符,现在我添加上,按照原来的方式可以收到正确的数据了,但是不明白的是问什么要人为的添\n结束符,字符串不是默认的以\n结束么。好像linux 下的网络通信都是这样,求解答 ?谢谢

 

还有就是,因为我接收的是GPS信号,需要实时的信号,而现在测试都是手动的加上了\n结束符,那实时测试的时候是不是还是收不到呀

追答
谁说的……java中的string和c/c++貌似不一样。而且c/c++中的字符串是以\0结束,不是\n。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式