python客户端无法连接到java服务器
Posted
技术标签:
【中文标题】python客户端无法连接到java服务器【英文标题】:python client cant connect to java server 【发布时间】:2022-01-21 04:04:09 【问题描述】:我试图在我的 java 应用程序和 python 客户端之间进行交流。但它似乎无法连接。 我不确定这是否是因为 IP 地址错误。因为我在某处读到您可以使用 PC 的 IP 连接到虚拟设备,但我也使用了虚拟设备的 10.0.x.x 地址,这似乎也不起作用。在 IntelliJ 中,我的代码似乎确实可以工作,只是不适用于应用程序。
我的python客户端代码:
import socket
HOST = "172.20.10.12"
PORT = 8080
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((HOST, PORT))
print('connected')
sock.sendall(b'Hello!')
data = sock.recv(1024)
print("1", data, '\n')
sock.sendall(b'Bye\n')
data = sock.recv(1024)
print("2", data, '\n')
print("Socket closed")
sock.close()
这是我的应用程序的接收端:StartReceive.java:
package com.example.test;
import java.io.IOException;
class StartReceive implements Runnable
@Override
public void run()
try
Receive.startReceive();
catch (IOException e)
e.printStackTrace();
我的receive.java:
public class Receive
static String fromClient;
static String toClient;
public static void startReceive() throws IOException
ServerSocket server = new ServerSocket(8080);
System.out.println("wait for connection on port 8080");
boolean run = true;
while (run)
Socket client = server.accept();
System.out.println("got connection on port 8080");
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out = new PrintWriter(client.getOutputStream(), true);
fromClient = in.readLine();
System.out.println("received: " + fromClient);
if (fromClient != null)
toClient = "message is received on server";
System.out.println("send: message is received");
out.println(toClient);
fromClient = in.readLine();
System.out.println("received: " + fromClient);
if (fromClient.equals("Bye"))
toClient = "bye received on server";
System.out.println("send: bye received on server");
out.println(toClient);
client.close();
run = false;
System.out.println("socket closed");
然后我在我的 mainactivity 中这样称呼它:
【问题讨论】:
你能告诉我们在服务器端打印什么吗? @markspace 嗨,它会打印到:wait for connection on port 8080 如果您无法接受传入连接,则可能是您的防火墙。 @markspace 确实可以。你知道怎么解决吗? 【参考方案1】:要调试连接问题,首先尝试在客户端将 IP 设置为“localhost”。
您还可以在服务器端打印 server.getInetAddress()。您可能没有监听您的客户想要连接的特定地址。
我会按如下方式调试:
运行服务器
在服务器 PC 上,键入命令“netstat -a -p tcp”(这是 Windows,对)并查找您认为是服务器的东西。 “虚拟安卓设备”必须出现在物理 PC 上,因为物理 PC 是物理连接到物理网络的东西。
尝试使用某些实用程序或其他工具连接到该服务器;我更喜欢远程登录。 '远程登录'。您至少应该在服务器控制台输出中看到服务器的“已连接”消息。
如果一切顺利,您现在知道服务器基本上可以正常工作了。
一旦您的客户端连接上,您就会遇到另一个错误:
您正在发送 6 个字节,没有换行符。
sock.sendall(b'Hello!')
您希望收到由换行符终止的数据。
fromClient = in.readLine();
您的接收器仍在等待行尾。
【讨论】:
您好。使用 localhost 它似乎也不起作用。甚至关闭了windows的防火墙。我确实似乎没有找到问题所在。它适用于 IntelliJ,但不适用于应用程序。 你打印服务器中的监听地址了吗? (在初始化服务器套接字之后)。输出是什么?这是什么操作系统? 我正在我的 Windows 机器上运行 android 应用程序(虚拟设备)。客户端在我的树莓派上运行。 我在调试时得到了一些额外的信息,如果有帮助的话:服务器:“ServerSocket[addr=0.0.0.0/0.0.0.0,localport=8080]”。客户端:“Socket[addr=/172.20.10.10,port=47104,localport=8080]” 您的客户端绑定到本地端口 8080 并尝试连接到 服务器上的端口 47104?这似乎不正确,并且与发布的代码不匹配。你打错了吗?以上是关于python客户端无法连接到java服务器的主要内容,如果未能解决你的问题,请参考以下文章
我无法从其他设备连接到Flask服务器(=不是从localhost)