0
我一直在服務器/客戶端應用程序中工作,需要從我的計算機上工作的服務器獲取小時。我的Android應用程序中未連接套接字
當我嘗試在手機上運行此應用程序時,它說SOCKET NOT CONNECTED。我嘗試了一切,但仍然無法正常工作。
線程正在工作,但套接字未連接!
權限我用:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
的MainActivity.java是:
package com.example.clientehora;
/* imports */
public class MainActivity extends Activity {
Socket socket = new Socket();
String SERVER_IP = "10.215.19.41";
int SERVERPORT = 2000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(new ClientThread()).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.main, menu);
return true;
}
public void ejecutar(View view) {
try {
System.out.println("Hola amigo, si me presionaste! =D" + socket.getInetAddress() + socket.getPort());
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String cadena = br.readLine();
System.out.println("LA CADENA ES: " +cadena);
EditText et = (EditText)findViewById(R.id.fecha);
et.setText(cadena);
br.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
class ClientThread implements Runnable {
@Override
public void run() {
try {
System.out.println("Se ha conectado sin problemas");
InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
socket = new Socket(serverAddr, SERVERPORT);
} catch (UnknownHostException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
爲什麼你在**之前登錄成功**你甚至進行連接嘗試?事實上,你似乎根本沒有調用你的ejecutar()方法。當你調用它時,你需要使用runOnUiThread來進行UI更新操作。 –
無論您正在運行的代碼是在使用實例化類時創建的空的非連接套接字。目前還不清楚爲什麼你要使用線程來創建一個新的套接字。 –
@BrianRoach - 可能是因爲你不被允許在UI線程上進行網絡操作(即使允許,也永遠不可取)。 –