各位大大,下面是小弟自己写得一个android做socket服务端的代码,但是在模拟器上运行时接收不到数据,客户端显示连接不到socket服务器(已经做了端口重定向)。麻烦各位帮我看看是代码的问题,还是模拟器设置或者其他的问题。
谢谢啦!!
代码如下:
package study.message.receive;import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;public class Message_ReceiveActivity extends Activity {
    /** Called when the activity is first created. */
private TextView msg_rec; 

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.message_receive);
        
        findViews();
        
        Thread socketServer=new Thread(new AndroidServer());
socketServer.start();
    }
   
    private void findViews()
    {
     msg_rec = (TextView) findViewById(R.id.msg_receive);
    }
    
    
class AndroidServer extends Thread
{

public void run() {
try {
ServerSocket serverSocket=new ServerSocket(12345);
while(true)
{
msg_rec.setText("等待接收用户连接:");
//接受客户端请求
Socket client=serverSocket.accept();
try
{
//接受客户端信息
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
String str=in.readLine();
msg_rec.setText("read:  "+str);
//向服务器发送消息
PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())),true);
out.println("return "+str);
in.close();
out.close();
}catch(Exception ex)
{
System.out.println(ex.getMessage());
ex.printStackTrace();
}
finally
{
client.close();
}
}
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
    
}
}

解决方案 »

  1.   

    看下logcat
    看下PC能不能ping通你的模拟器
    加访问网络权限没 <uses-permission android:name="android.permission.INTERNET"/>
      

  2.   

    readLine好像要\n结尾的字符串,我用了你的代码试了一下,字符串末尾没有/n就卡在readLine那里,有就可以读了。readLine这种函数真傻,提供一个类似于read(void* data, int length)这样的多好啊