我在自己本机上运行工具:中华经典网络军刀.exe(其实就是nc.exe的图形工具,TCP协议),监听本机的8000端口
然后在模拟机上运行SocketClient程序,经测试,可以正常与PC机上的8000端口建立连接,并可正常发送数据到服务端(指中华经典网络军刀.exe),但该android程序无法接收服务端返回的数据,并且发到服务端的汉字显示为乱码,请问如何解决这两个问题,麻烦高手赐教,万分感谢!附上SocketClient程序完整源码:package com.SocketClient;  import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;public class SocketClient extends Activity {
/** Called when the activity is first created. */
private final String DEBUG_TAG = "Activity";
private  String ipaddress;
private  int port ; //服务器IP、端口 
private Thread mThread = null;
private Socket mSocket = null;
private Button mButton_In = null;
private Button mButton_Send= null;
private EditText mEditText01  = null;
private EditText mEditText02  = null;
private BufferedReader mBufferedReader = null;
private EditText            mPortEdit =null;
private EditText            mIpEdit =null;
private PrintWriter mPrintWriter = null;
private  String mStrMSG = "";
boolean connected;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mButton_In = (Button)findViewById(R.id.Button_In);
mButton_Send = (Button)findViewById(R.id.Button_Send);
mEditText01=(EditText)findViewById(R.id.EditText01);
mEditText02=(EditText)findViewById(R.id.EditText02);
mPortEdit=(EditText)findViewById(R.id.PortEdit);
mIpEdit=(EditText)findViewById(R.id.IpEdit);
mButton_In.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
if(!connected)
{
ipaddress=mIpEdit.getText().toString();
         port=Integer.parseInt(mPortEdit.getText().toString());
try 
{
mSocket = new Socket(ipaddress, port); //连接服务器
mBufferedReader = new BufferedReader(new InputStreamReader(mSocket.getInputStream()));//取得输入、输出流
mPrintWriter=new PrintWriter(mSocket.getOutputStream(), true);   
mIpEdit.setEnabled(false);
mPortEdit.setEnabled(false);
mButton_In.setText("disConnect");
connected=true;
mEditText02.setEnabled(connected);
mButton_Send.setEnabled(connected);
}
catch (Exception e) 
{
new AlertDialog.Builder(SocketClient.this)
         .setTitle("ERROR!")
         .setMessage(e.toString())
         .setPositiveButton
         (
         "确定",
         new DialogInterface.OnClickListener()
         {
         public void onClick(DialogInterface dialoginterface,int i)
         {
         mIpEdit.setText("");
         mPortEdit.setText("");
         }
         }
         )
         .show();
Log.e(DEBUG_TAG, e.toString());
}
}
else
{
connected=false;
mEditText02.setText("");
mButton_In.setText("Connect");
mPrintWriter.print("exit"+"\n");
mPrintWriter.flush();
mIpEdit.setEnabled(true);
mPortEdit.setEnabled(true);
mEditText02.setEnabled(connected);
mButton_Send.setEnabled(connected);
}
}
});

mButton_Send.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
String str = mEditText02.getText().toString() + "\n";//取得编辑框中我们输入的内容
mEditText02.setText("");
try 
{  
     mPrintWriter.print(str);//发送给服务器
     mPrintWriter.flush();
}
catch (Exception e) 
{
Log.e(DEBUG_TAG, e.toString());
}
}
});
mThread = new Thread(mRunnable);
mThread.start();
    }
    private Runnable mRunnable= new Runnable() 
{
public void run()
{
while (true)
{
try
{
if ( (mStrMSG = mBufferedReader.readLine()) != null )
{
mStrMSG+="\n";//消息换行
mHandler.sendMessage(mHandler.obtainMessage());// 发送消息
}
}
catch (Exception e)
{
Log.e(DEBUG_TAG, e.toString());
}
}
}
};

Handler mHandler= new Handler() 
{
  public void handleMessage(Message msg)
  {
  super.handleMessage(msg);
  try // 刷新
  {
  mEditText01.append(mStrMSG);//将聊天及返回记录添加进来
  }
  catch (Exception e)
  {
  Log.e(DEBUG_TAG, e.toString());
  }
  }
 };
 public boolean onKeyDown(int keyCode,KeyEvent event)
 {
 if(keyCode==KeyEvent.KEYCODE_BACK)
 {
    String str="exit"+"\n";
try 
{  
     mPrintWriter.print(str);//发送给服务器
     mPrintWriter.flush();
}
catch (Exception e) 
{
Log.e(DEBUG_TAG, e.toString());
}
    this.finish();
 }
 return true;
 }
}