[英]TCP Socket programming not working between desktop and android tablet
我已經完成了一個將數據從服務器發送到客戶端的應用程序。...代碼(服務器和客戶端)在桌面應用程序中可以完美運行,但是當我將客戶端放在android平板電腦和服務器在桌面上時,它無法正常工作
我正在使用wifi在android和桌面之間進行通信
我設置的權限如下所示
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
誰能告訴我這是什么問題.....
我收到這個例外
java.net.ConnectException: failed to connect to /192.168.1.74 (port 4545): connect failed: ECONNREFUSED (Connection refused)
服務器.java
public class Server
{
private int TAB_SERVER_PORT = 4545;
private static PrintWriter TABout;
private HashSet <PrintWriter> TABhs=new HashSet<PrintWriter>();
public static void main(String args[])
{
new Thread(new TABServerThread()).start();
}
private class TABServerThread implements Runnable {
private ServerSocket TABserver;
@Override
public void run() {
try {
TABserver = new ServerSocket(TAB_SERVER_PORT);
System.out.println("Server Start the server at port " + TAB_SERVER_PORT + " and waiting for clients...");
while (true) {
Socket socket = TABserver.accept();
System.out.println("Server Accept socket connection: "+ socket.getLocalAddress());
new Thread(new TABClientHandler(socket)).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
private class TABClientHandler implements Runnable {
private Socket clientSocket;
private Scanner in;
public TABClientHandler(Socket clietSocket) {
this.clientSocket = clietSocket;
}
@Override
public void run() {
try {
TABout = new PrintWriter(clientSocket.getOutputStream());
TABhs.add(TABout);
in = new Scanner(clientSocket.getInputStream());
String line;
while ((line = in.nextLine()) != null) {
if (line.equals("Reply")){
TABout.print("Server replies");
TABout.flush();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
客戶端.java
public class Client implements Runnable {
private int TAB_SERVER_PORT = 4545;
private Socket tabletclient;
private PrintWriter tabletout;
private Scanner in;
@Override
public void run() {
String line;
boolean flag=true;
System.out.println("Waiting for server connection....");
while(flag){
try {
tabletclient = new Socket("192.168.1.74", TAB_SERVER_PORT);
tabletout = new PrintWriter(tabletclient.getOutputStream());
in = new Scanner(tabletclient.getInputStream());
try
{
if((line = in.nextLine())!=null)
{
System.out.println("Client Server says: " + line);
if (line.equals("Hello client")) {
tabletout.println("Reply");
tabletout.flush();
}
}
}catch(Exception d){
System.out.println("Connection from server has lost.........");
}
} catch (UnknownHostException e) {
} catch (IOException e) {
}
}
}
public static void main(String[] args) {
new Thread(new Client()).start();
}
}
它必須是阻止連接的防火牆。 您可以禁用它,然后重試。 如果還有其他問題,請使用wireshark捕獲一些數據包以檢查問題出在哪里。
您可以在Linux或Windows上都嘗試“ netstat -n”,以查看服務器套接字是否已綁定並正在那里偵聽。
將您的android應用程序更改為客戶端,將桌面應用程序更改為服務器。 這種方式更加簡單和安全(我認為當然)。由於...您知道它是移動的,因此您的移動設備ip可以隨時更改。您的客戶端無法猜測其移動服務器的ip。
將Client.java移至android應用,將Server.java移至桌面應用。
嘗試使用“ ifconfig”(如果您在Linux上工作)來檢查IP地址,或者嘗試使用“ ipconfig”(如果您在Windows系統上工作); 確保您的IP地址恰好是“ 192.168.1.74”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.