在一个简单的客户端 - 服务器TCP套接字中,当我尝试在Android Studio中创建客户端套接字时,我遇到了问题 . 导致错误的指令是 Socket s=new Socket(hostname,port);
我使用的端口是1993,我为 hostname
变量尝试了一些值:
-
hostname="127.0.0.1"
-
hostname="localhost"
-
hostname=""
-
hostname=InetAddress.getByName([with-the previous 2 values])
在每种情况下,由于此错误,应用程序停止,下面的错误属于第一个点,其他错误得到类似的错误 .
W/System.err: Couldn't get I/O for the connection to 127.0.0.1
W/System.err: java.net.ConnectException: failed to connect to /127.0.0.1 (port 1993): connect failed: ECONNREFUSED (Connection refused)
at libcore.io.IoBridge.connect(IoBridge.java:124)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:163)
at java.net.Socket.startupSocket(Socket.java:592)
at java.net.Socket.tryAllAddresses(Socket.java:128)
at java.net.Socket.(Socket.java:178)
at java.net.Socket.(Socket.java:150)
W/System.err: at com.example.davide.beachapp.model.ClientSocket$MyThread.run(ClientSocket.java:92)
Caused by: android.system.ErrnoException: connect failed: ECONNREFUSED (Connection refused)
at libcore.io.Posix.connect(Native Method)
at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:111)
at libcore.io.IoBridge.connectErrno(IoBridge.java:137)
at libcore.io.IoBridge.connect(IoBridge.java:122)
... 7 more
Eclipse中的相同指令工作,我在命令行上使用服务器“nc -l 1993”测试它,一切都在Eclipse上运行 .
也许这是清单的一些配置问题?
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.davide.beachapp">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" >
</intent-filter>
</activity>
</application>
</manifest>
2 回答
如果您在模拟器上,请尝试使用
10.0.2.2
而不是127.0.0.1
.有关详细信息,请访问此页面:
Set up Android Emulator networking
在模拟器中,您必须使用LAN上的计算机IP . 例如,在我的网络
Gateway: 192.168.0.1
和我的计算机的IP是192.168.0.2
. 所以,在Android模拟器中,我必须:Socket socket = new Socket("192.168.0.2",1993);