0

我正在使用套接字开发一个安卓应用程序。但Socket soc=new Socket(ip,port)总是给我一个SocketTimeoutException。我在java项目中使用socket,没关系。但不是在android项目中。

public static void main(String[] args) {
    try{
        Socket soc=new Socket("192.168.177.103",8888);
    }catch(Exception e){
        e.printStackTrace();
    }
}

这没关系,但不是在 android 项目中。为什么?

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_mmmm);

    new Thread(){
        public void run(){
            try{
                Socket soc=new Socket("192.168.177.103",8888);
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    }.start();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_mmmm, menu);
    return true;
}

有人能告诉我为什么吗?非常感谢。在android中使用socket时的异常详情:

java.net.SocketTimeoutException: Connection timed out
at org.apache.harmony.luni.platform.OSNetworkSystem.connect(Native Method)
at dalvik.system.BlockGuard$WrappedNetworkSystem.connect(BlockGuard.java:361)
at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:204)
at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
at java.net.Socket.startupSocket(Socket.java:732)
at java.net.Socket.tryAllAddresses(Socket.java:152)
at java.net.Socket.<init>(Socket.java:211)
at java.net.Socket.<init>(Socket.java:178)
at com.example.mmmmm.MMMMActivity$1.run(MMMMActivity.java:26)
4

1 回答 1

0

您的服务器 192.168.177.103 没有及时响应,或者根本没有响应。也可能是8888端口被其防火墙关闭了。所以这实际上不是Android设备的问题。

如果返回的内容是基于 HTTP 的,请使用连接到同一 LAN 的一些台式 PC 检查服务器是否响应普通浏览器请求。另外,试试

 adb shell ping 192.168.177.103

这将允许验证服务器是否可访问。但是,您的服务器上可能会禁用 ping,尤其是当它是 Windows 计算机时。

如果服务器可以从通过有线网络连接的桌面访问,但仍然无法从 Android 访问,那么检查无线路由器的防火墙是如何配置的也可能很好。

于 2013-01-14T12:22:51.900 回答