![](/img/trans.png)
[英]In Java or .NET, how would you create a server that listens to a specific port?
[英]How to create a socket that listens a localhost port in Android
在解釋我的疑問之前,我要提到這種沖突中有三個“參與者”:
當該人單擊該程序中遠程使用的鏈接欄時,將有一個Shell腳本將一個字符串發送到該人的計算機端口(例如1100)。 要求是:從桌面獲取此字符串后,將其發送到平板電腦。
那么,從台式機到平板電腦獲取此字符串的最佳方法是什么?
現在,正在偵聽1100端口的台式計算機中運行着一個Java守護程序。 這個Java應用程序可以作為台式機和平板電腦之間的中介,但是我認為也許有一種方法可以刪除此守護程序,而只是使用平板電腦獲取創建套接字的計算機數據。
您還可以在Android中實現Java套接字。 就像在Android中的“桌面套接字”上一樣,它偵聽端口,但這將在本地訪問,因為沒有將靜態可用IP分配給Android設備的方法。
還有另一種解決方案,那就是socket.io Socket.io是我用過的最好的套接字庫之一。 在Node.js服務器和Android上實現socket.io只需連接到Node.js服務器,您就可以向所有連接的用戶發送相同的字符串,無論它是台式機還是Android。
private class ServerThread extends Thread {
@Override
public void run() {
try {
serverSocket = new ServerSocket(portNumber);
while (true) {
try {
clientSocket = serverSocket.accept();
} catch (IOException e) {
LOGGER.error("Error on accept!");
}
// new thread for a client
new EchoThread(clientSocket).start();
}
}catch (Exception e) {
e.printStackTrace();
}
finally {
if (serverSocket != null) {
try {
serverSocket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
public class EchoThread extends Thread {
protected Socket clientSocket;
BufferedReader br = null;
public EchoThread(Socket clientSocket) {
this.clientSocket = clientSocket;
}
public void run() {
try {
br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
} catch (IOException e) {
...
}
isConnected = true;
while (isConnected) {
try {
receivedMessage = br.readLine();
if (!Strings.isNullOrEmpty(receivedMessage)) {
....
}
else {
//sleep 0,1s
//TODO (ver): Thread.sleep(100);
}
} catch (Exception e) {
if (e instanceof IOException) {
}
else if (e instanceof JsonSyntaxException){
}
else {
try {
Thread.sleep(2000);
} catch (InterruptedException inte) {
inte.printStackTrace();
}
}
}
if (//yourmessagecondition){
isConnected = false;
}
}
if (!isConnected){
try {
br.close();
clientSocket.close();
}catch (IOException ioe){
ioe.printStackTrace();
}
}
}
}
希望對您有所幫助,它在這里可以正常工作...您可能會在Internet上找到更簡單的示例。 PS:如果您使用USB電纜與計算機應用程序通信,則可以使用“ adb forward”命令,只需在google上找到一些示例,並在有幫助的情況下接受此答案即可;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.