Android客户端不能接收到PC服务器Socket返回的数据 本帖最后由 luntanxiazai 于 2010-05-25 16:17:52 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 str=in.readLine();在这一行之前另起线程做while循环, 貌似没有问题。我开始时候也阻塞了,是因为在android端发送了以后(out.println("aaaaaa"))没有out.flush(). 所以在Server端开始时候调用in.readline会阻塞在那里。后来在android客户端加入out.flush就可以了。 我的可以运行的代码:Android 客户端代码:package com.ltb.SCActivity;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class SCActivity extends Activity { private TextView mRecvText = null; private EditText mSentText = null; private Button mSendRecvButton = null; private Socket mSocket = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mRecvText = (TextView)findViewById(R.id.recvText); mSentText = (EditText)findViewById(R.id.sentText); mSendRecvButton = (Button)findViewById(R.id.sendRecvButton); mSendRecvButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String sentMessage = mSentText.getText().toString() + "\r\n"; try { mSocket = new Socket("10.126.38.155", 12577); Log.i("------SCActivity---before send---", sentMessage); PrintWriter send = new PrintWriter(new BufferedWriter(new OutputStreamWriter(mSocket.getOutputStream()))); send.println(sentMessage); send.flush(); //Important!!!!!! //send.write(sentMessage); Log.i("------SCActivity---after send---", sentMessage); BufferedReader recv = new BufferedReader(new InputStreamReader(mSocket.getInputStream())); Log.i("------SCActivity---Before ---recv.readLine()---", sentMessage); String recvMsg = recv.readLine(); Log.i("------SCActivity---after ---recv.readLine()---", recvMsg); if (recvMsg != null) { mRecvText.setText(recvMsg); } else { mRecvText.setText("Cannot receive data correctly."); } send.close(); recv.close(); mSocket.close(); } catch (Exception ex) { ex.printStackTrace(); } } }); } 服务器端代码:import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class Server implements Runnable { public void run() { try { ServerSocket serverSocket = new ServerSocket(12577); while (true) { Socket client = serverSocket.accept(); System.out.println("accept"); try { BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); String str = in.readLine(); System.out.println("read:" + str); PrintWriter pout = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())), true); //pout.write("Server Received Message: " + str); pout.println("Server Received Message: " + str); System.out.println("after send in server");/* BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); String str = in.readLine(); System.out.println("read:" + str);*/ pout.close(); in.close(); } catch (Exception e) { System.out.println(e.getMessage()); e.printStackTrace(); } finally { client.close(); System.out.println("close"); } } } catch (Exception e) { System.out.println(e.getMessage()); } } public static void main(String argv[] ) { Thread pcServerThread = new Thread(new Server()); pcServerThread.start(); }}~ 平板通过HDMI连接电脑,播放视频时,触摸区域不完整 安卓开发应用如何提交,有些什么规范等等.. 开发android程序用一个activity还是多个activity? 求高手帮分析这个android应用怎么做? 多表联查后如何取值 请问这个界面应该如何布局啊? @@怎样获取蓝牙设备类别@@ 求指点,android空指针异常 这个效果如何做 安卓服务器获取客户端数据 eclipse ADT sdk的问题 Android 4.0 Home键失效 keycode = 122错误
后来在android客户端加入out.flush就可以了。
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;public class SCActivity extends Activity {
private TextView mRecvText = null;
private EditText mSentText = null;
private Button mSendRecvButton = null;
private Socket mSocket = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mRecvText = (TextView)findViewById(R.id.recvText);
mSentText = (EditText)findViewById(R.id.sentText);
mSendRecvButton = (Button)findViewById(R.id.sendRecvButton);
mSendRecvButton.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
String sentMessage = mSentText.getText().toString() + "\r\n";
try {
mSocket = new Socket("10.126.38.155", 12577);
Log.i("------SCActivity---before send---", sentMessage);
PrintWriter send = new PrintWriter(new BufferedWriter(new OutputStreamWriter(mSocket.getOutputStream())));
send.println(sentMessage);
send.flush(); //Important!!!!!!
//send.write(sentMessage);
Log.i("------SCActivity---after send---", sentMessage);
BufferedReader recv = new BufferedReader(new InputStreamReader(mSocket.getInputStream()));
Log.i("------SCActivity---Before ---recv.readLine()---", sentMessage);
String recvMsg = recv.readLine();
Log.i("------SCActivity---after ---recv.readLine()---", recvMsg);
if (recvMsg != null) {
mRecvText.setText(recvMsg);
} else {
mRecvText.setText("Cannot receive data correctly.");
}
send.close();
recv.close();
mSocket.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
}
服务器端代码:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class Server implements Runnable {
public void run() {
try {
ServerSocket serverSocket = new ServerSocket(12577);
while (true) {
Socket client = serverSocket.accept();
System.out.println("accept");
try {
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
String str = in.readLine();
System.out.println("read:" + str);
PrintWriter pout = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())), true);
//pout.write("Server Received Message: " + str);
pout.println("Server Received Message: " + str); System.out.println("after send in server");
/* BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
String str = in.readLine();
System.out.println("read:" + str);*/ pout.close();
in.close();
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
} finally {
client.close();
System.out.println("close");
}
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
} public static void main(String argv[] ) {
Thread pcServerThread = new Thread(new Server());
pcServerThread.start();
}
}
~