Java TCP套接字编程在桌面和android平板电脑之间不起作用
我做过一个应用程序,它将数据从服务器发送到客户端……这个代码(服务器和客户端)在桌面应用程序中运行得非常好,但当我将客户端放在android平板电脑上,而服务器放在桌面上时,它就不工作了 我使用wifi在android和桌面之间进行通信 我设置的权限如下所示Java TCP套接字编程在桌面和android平板电脑之间不起作用,java,android,sockets,Java,Android,Sockets,我做过一个应用程序,它将数据从服务器发送到客户端……这个代码(服务器和客户端)在桌面应用程序中运行得非常好,但当我将客户端放在android平板电脑上,而服务器放在桌面上时,它就不工作了 我使用wifi在android和桌面之间进行通信 我设置的权限如下所示 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.perm
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
Server.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();
}
}
}
}
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
将Client.java移动到android应用程序,将Server.java移动到桌面应用程序。尝试使用“ifconfig”(如果您在Linux上工作)检查您的IP地址,或使用“ipconfig”(如果您在Windows系统上工作);确保您的IP地址正好是“192.168.1.74”。您确定服务器允许连接到此端口吗?有防火墙阻止它吗?@Henry sir没有防火墙…….先生如何检查防火墙是否阻止…….你能告诉我怎么做吗?你的主机的操作系统是什么?查看我编辑的答案,你是否尝试使用netstat命令检查你的服务器套接字是否正常工作?如果它在那里,你够不着,然后是防火墙——第三方防火墙或默认的microsoft工具——阻止了连接。先生,我有很多ip……我的android平板电脑ip是192.168.1.67,但它不在那里……。制作移动设备服务器太难了。如果你制作安卓设备客户端和桌面服务器,你可能很容易做到。你知道吗你的移动设备ip可以随时更改。我看到你的Client.java在桌面上工作,因为它有一个main方法。现在它就像android中的Client.java一样,和desktop中的Server.java尝试从该错误中获取桌面的internet ip意味着在大多数情况下没有服务器侦听此端口或ip。这与手头的问题有什么关系?你可以随心所欲地在android上运行服务器/我说过这种方式更简单。不是不可能。请通读一遍。你的否决票毫无意义。先生。。。。。现在,我的客户端正在连接到服务器…但服务器无法使用…out.println(“消息”)将任何数据…发送到客户端;我曾多次尝试在安卓平板电脑和个人电脑之间建立连接,但似乎只有安卓平板电脑作为服务器,个人电脑作为客户端才能正常工作。
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();
}
}