android做客户端,C++作服务端的socket通信 记得LZ之前问过一个套接字阻塞的问题啊 , 还没解决? 你的意思是客户端这边始终读不了接收的数据?LZ再上一点代码看看 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 那个解决了~InetAddress serverAddr = InetAddress.getByName("61.164.108.142");// Socket socket = new Socket(serverAddr, 8500); BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); byte[] sendpacket = new byte[70]; byte[] Namepacket = new byte[13]; Namepacket = m_strLoginName.getBytes(); byte[] Passwordpacket = new byte[33]; Passwordpacket = getMD5Str(m_strPassWord).getBytes(); byte[] headpacket = BuildMSQHead(1,CSM_LOGININ,5, (short)46); System.arraycopy(headpacket, 0, sendpacket, 0, headpacket.length); System.arraycopy(Namepacket, 0, sendpacket, 19, Namepacket.length); System.arraycopy(Passwordpacket, 0, sendpacket, 32, Passwordpacket.length); socket.getOutputStream().write(sendpacket); socket.getOutputStream().flush(); Log.i("strRecv", socket.toString()); String strRecv = br.readLine(); if(strRecv == "") { if(socket != null) socket.close(); m_bIsLoginSuccess = true; } BaseClass.this.LoginResult(); 在服务端打trace啊,确定服务端确定是发过来了,且正确我都是这样调试的。 你发送过来的东西有回车那些表示一段的符号的东西么?如果没有当然readLine()会卡住啊,一直等到这样的符号,它才能确定一行结束了,要不就会卡住 是一定要有回车符号?~除了readLine()还有其他的客户端接收的方法么 你看看说明,我记得是 \n , \r 都可以表示,只有有这些符号时,readLine()才能判定一行结束 果然症结是在这,我记得讨论这个问题的人很多,这个问题的解决我建议你就不要用字符流去读取,用字节流读取,然后再编码转换一下显示出字符串,因为是和C++通讯,所以编码方式不同,会出现乱码,关于乱码的问题网上解决很多,大概就是getBytes(),然后new String("你的字符转","GB2312");方法,如果你非要用字符流,那你就认为的加分隔符,或者你就用read方法 结贴总结:用readline来接收数据时,发送的数据里面必须包括换行符我用InputStream的read来读字节流但是读出来的这个数据要转一下~谢谢大家的帮助~ 重新开启,请问下楼主,你是如何通过socket发送数据到服务端的?需要做哪些特殊的处理,能讲解下吗?最好贴一点代码上来,好理解点!谢谢了 高分求移动版如下menu该如何做,谢谢了 android 读取 XML 使用spinner,程序运行就崩溃,请帮忙看看。 自动登录,求思路 Android3.0 Gmail android 弹出框返回值 新人求助! nullpointerexception 的问题! 散分,QQ和360谁会赢? 导航栏模拟器显示正常,真机显示乱码,求教! vpn 打开/关闭 怎么让界面显示的时候不聚焦任何控件 android总联不上PC
Socket socket = new Socket(serverAddr, 8500);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
byte[] sendpacket = new byte[70];
byte[] Namepacket = new byte[13];
Namepacket = m_strLoginName.getBytes();
byte[] Passwordpacket = new byte[33];
Passwordpacket = getMD5Str(m_strPassWord).getBytes();
byte[] headpacket = BuildMSQHead(1,CSM_LOGININ,5, (short)46);
System.arraycopy(headpacket, 0, sendpacket, 0, headpacket.length);
System.arraycopy(Namepacket, 0, sendpacket, 19, Namepacket.length);
System.arraycopy(Passwordpacket, 0, sendpacket, 32, Passwordpacket.length);
socket.getOutputStream().write(sendpacket);
socket.getOutputStream().flush();
Log.i("strRecv", socket.toString());
String strRecv = br.readLine();
if(strRecv == "")
{
if(socket != null)
socket.close();
m_bIsLoginSuccess = true;
}
BaseClass.this.LoginResult();
我都是这样调试的。
这个问题的解决我建议你就不要用字符流去读取,用字节流读取,然后再编码转换一下显示出字符串,因为是和C++通讯,所以编码方式不同,会出现乱码,关于乱码的问题网上解决很多,大概就是getBytes(),然后
new String("你的字符转","GB2312");方法,
如果你非要用字符流,那你就认为的加分隔符,或者你就用read方法
用readline来接收数据时,发送的数据里面必须包括换行符
我用InputStream的read来读字节流
但是读出来的这个数据要转一下~
谢谢大家的帮助~