Android Studio的套接字初始化失败



我目前正在处理一个项目,该项目需要一个android应用程序来连接到我创建的java服务器。问题是套接字没有初始化。我已将权限添加到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" />

我的应用程序代码如下:

按钮触发器:

View.OnClickListener btnDownloadListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
//Implement download code
try{
new ConnectionManager().execute("10.90.181.91" , "21002");
}catch(Throwable t){
}
}
};

ConnectionManager后台功能:

protected String doInBackground(String... args) {
try{
Log.i("Test", "background thread started");
int port = Integer.parseInt(args[1]);
InetAddress serverAddr = InetAddress.getByName(args[0]);
Socket connSock = new Socket(serverAddr, port);
Log.i("Test", "Created Socket");
}catch(Throwable t){
}
return "";
}

日志正在输出"后台线程已启动",但从未输出"已创建套接字">

服务器代码如下:主要方法

try{
ServerSocket serverSocket = null;
boolean listeningSocket = true;
try {
serverSocket = new ServerSocket(21002);
} catch (IOException e) {
System.err.println("Could not listen on port: 21002");
}
int count = 0;
while(listeningSocket){             
try{
Socket clientSocket = serverSocket.accept();
new ServerThread(clientSocket).start();                 
}catch(Throwable t){
}
}
System.out.println("You should not be here");
serverSocket.close();
}catch(Throwable t){
}

服务器线程

public class ServerThread extends Thread {
private Socket socket = null;
private String s;
private  InputStream in;
private  OutputStream out;
BufferedReader is;
BufferedWriter os;
public ServerThread(Socket s) {
socket = s;
System.out.println("Thread started: " + socket.getInetAddress());
try{
in = socket.getInputStream();
out = socket.getOutputStream();
out.flush();
is = new BufferedReader(new InputStreamReader(in));
os = new BufferedWriter(new OutputStreamWriter(out));
}catch(Throwable t){
t.printStackTrace();
}       
}
public void run() {
System.out.println("Thread is running");
String dataType = "";
Boolean awaitingTransfer = false;
try {
while(true){
if(in.available() > 0 && !awaitingTransfer){
dataType = is.readLine();
System.out.println(dataType);
}
if(in.available() > 0 && awaitingTransfer){
try{
ArrayList<SpotCheck> tempList = new ArrayList<SpotCheck>();     
while(in.available() > 0){
//tempList = (ArrayList<SpotCheck>) in.readObject(); 
}
ServerMain.manager.applyChanges(tempList);
awaitingTransfer = false;
}catch(Throwable t){
t.printStackTrace();
}
}
}
} catch (Exception e) {
e.printStackTrace();
try {
in.close();
out.close();
socket.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}

谢谢你的帮助!

作为一名业余程序员,我只是想问你,你能不能像一样为doInBackground的"catch()"博客干杯

catch(Exception e)
{
runOnUiThread(new Runnable(){
@Override
public void run(){
Toast.makeText(getApplicationContext(), e.toString(),
Toast.LENGTH_LONG).show();
}
});
}

所以它可以更具体地显示你的问题,也许它会变得更容易处理。但我也不确定它是否有效,我的意思是在异步任务类中使用toast有点棘手。

最新更新