本帖最后由 luntanxiazai 于 2010-05-25 16:17:52 编辑

解决方案 »

  1.   

    str=in.readLine();在这一行之前另起线程做while循环,
      

  2.   

    貌似没有问题。我开始时候也阻塞了,是因为在android端发送了以后(out.println("aaaaaa"))没有out.flush(). 所以在Server端开始时候调用in.readline会阻塞在那里。
    后来在android客户端加入out.flush就可以了。
      

  3.   

    我的可以运行的代码: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();
        }
    }