读书人

[初学者提问]Socket

发布时间: 2013-11-09 17:06:34 作者: rapoo

[菜鸟提问]Socket
本帖最后由 yigedou 于 2013-11-04 17:15:51 编辑 自己在新开的线程创建了个SOCKET
然后又开了个线程接收数据
为什么只有偶然的情况才能收到server端发送的数据呢
请大虾们帮检查检查是不是哪里写的有问题


public SocketConnect(Context context) {
init(context);
new Thread(runnableSocket).start();
new Thread(runnableBlock, "TCP_Recv").start();
}


Runnable runnableSocket = new Runnable() {
@Override
public void run() {
try {
Log.v(TAG, "Start new Socket");
tcpSocket = new Socket(serverIp, SEVER_PORT);
Log.v(TAG, "Socket create success");
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};

/** 接收数据 **/
private Runnable runnableBlock = new Runnable() {
@Override
public void run() {
while (isRun) {
if (tcpSocket == null) {
return;
}
receivePacket();
}
}
};

/** 接收数据包 **/
private void receivePacket() {
if (tcpSocket == null)
return;
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(
tcpSocket.getInputStream()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String txt = null;
try {
txt = reader.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (txt != null)
Log.v(TAG, "txt = " + txt);
}

[解决办法]
String data = dataInputStream.readLine(); 这个地方阻塞,等待服务器响应一行文本,
这个文本一定要有换行符,否则这个代码就会不动。

建议用字节流读取。无需考虑是否有换行符。

http://blog.csdn.net/birdsaction/article/details/7083031

读书人网 >Android

热点推荐