我正在尝试将Android客户端连接到PC服务器,但客户端总是崩溃并且不连接到服务器。 服务器由两个方法组成,一个等待客户端连接,另一个打印客户端连接(我没有使用线程,我只连接一个客户端) 服务器(我只会显示第一种方法):
public Socket listeningClient ()
{
try
{
server = new ServerSocket(8080);
client = server.accept();
server.close();
}
catch (Exception e)
{
System.out.println(e.getMessage());
System.exit(1);
}
return client;
}
在客户端中有一个按钮,用于调用方法以在单击时创建套接字:
客户端
public class Client {
String IP = "192.168.1.4";
int portaServer = 8080;
Socket miosocket = null;
public void connetti() {
try {
InetAddress nomeServer = InetAddress.getByName(IP);
miosocket = new Socket(nomeServer, portaServer);
miosocket.close();
}
catch (UnknownHostException e) {
e.printStackTrace();
Log.e("MyApp", "UnknownHost");
}
catch (Exception e) {
e.printStackTrace();
Log.e("MyApp", "Exception");
System.exit(1);
}
}
}
应用程序始终崩溃:miosocket = new Socket(nomeServer, portaServer);
抛出异常(第二个)。有人可以告诉我,我的代码是错误的(我很确定问题是代码)还是服务器上有问题?
(在AndroidManifest.xml中我使用了这些权限:
<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"/>
)
答案 0 :(得分:0)
根据您在注释中引用的异常,您无法在主线程上执行阻塞IO。您需要生成一个线程(或使用AsyncTask
并在那里完成工作。
如果您真的想在Android服务上托管服务器,则应该通过创建Service
并使用它来托管启动服务器并处理请求的线程来实现。