android开发tcp客户端循环接收信息,为什么收不到呀
下面是logcat打印出来的信息,显示表明连接没问题,也进入循环了,而且服务器端可以确定发送了信息,服务器端是linux下的socket程序,应该没问题,验证过了,and...
下面是logcat打印出来的信息,显示表明连接没问题 ,也进入循环了,而且服务器端可以确定发送了信息,服务器端是linux下的socket程序,应该没问题,验证过了,android的客户端显示表明阻塞在接收信息部分,求教了!
展开
2个回答
展开全部
InputStream reader = socket.getInputStream()
byte[] bbuf = new byte[1000];
int count = reader.read(bbuf);
把读取数据的方式改成这种试试,怕是你使用readline()方法的时候接收不到最后的“回车换行符”导致的。
byte[] bbuf = new byte[1000];
int count = reader.read(bbuf);
把读取数据的方式改成这种试试,怕是你使用readline()方法的时候接收不到最后的“回车换行符”导致的。
追答
先回答你那个字符串“\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 将字节数组转化成字符串”就行了。
其实以上这些都是最基本的知识,哥们基础要扎实一些才好呢!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询