gpt4 book ai didi

java - TcpSockets 无法连接

转载 作者:太空宇宙 更新时间:2023-11-04 14:35:41 26 4
gpt4 key购买 nike

我正在尝试在作为客户端的笔记本电脑和作为服务器的个人电脑之间建立 TCP 连接。我的目标是使用服务器在两个 Android 设备之间发送消息。服务器有一个公共(public)IP地址。为了测试连接,我编写了两个简单的 Java 类:

import java.net.ServerSocket;
import java.net.Socket;

public class TcpServer {
public ServerSocket welcome;
public Socket soc;
public int listeningPort = /* default port */;

public TcpServer() {
}

public static void main(String[] args) {
TcpServer ms = new TcpServer();
if(args.length > 0) {
ms.listeningPort = Integer.parseInt(args[0]);
}
ms.listen();
}

public void listen() {
try {
welcome = new ServerSocket(listeningPort);
System.out.println(">>> listening on port " + listeningPort + " <<<");

soc = welcome.accept();
System.out.println(">>> got a new connection from "
+ soc.getInetAddress().toString() + " <<<");

while (true) {
try {
byte b[] = new byte[1024];
soc.getInputStream().read(b, 0, 1);
System.out.print((char) (b[0]));
} catch (Exception e) {
System.err.println(e);
}
}

} catch (Exception e) {
System.err.println(e);
}
}
}

import java.net.Socket;

public class TcpSendClient {
private String serverIp = /* some ip */;
public int port = /* default port */;
private SendThread st;

public TcpSendClient() {
}

public static void main(String[] args) {
TcpSendClient client = new TcpSendClient();
if(args.length > 0) {
client.port = Integer.parseInt(args[0]);
}
client.send();
}

public void send() {
System.out.println("Try to connet to " + serverIp + " via Port" + port);
st = new SendThread(serverIp, port);
st.start();
}

class SendThread extends Thread {
private Socket soc;

public SendThread(String theIp, int thePort) {
try {
soc = new Socket(theIp, thePort);
} catch (Exception e) {
System.err.println(e);
}
}

public void run() {
try {
while (true) {
String toSend = "Hello ";
soc.getOutputStream().write(toSend.getBytes());
Thread.sleep(800);
System.out.println("sent");
}
} catch (Exception e) {
System.err.println(e);
}
}
}
}

当我在服务器电脑上运行这两个 Java 文件时,连接工作正常。如果我用一台笔记本电脑设置本地 Wi-Fi 并使用另一台笔记本电脑连接到它,它也可以工作。但是,当我从连接到互联网的笔记本电脑运行客户端文件时,我无法获得连接。在服务器上的防火墙中,我打开了许多连接端口,并且我用作客户端的笔记本电脑已禁用防火墙。除了防火墙之外,我真的不知道要查看什么才能使连接运行。关于我的问题的原因和解决方案有什么想法吗?

最佳答案

我找到了解决方案:Windows 防火墙仍然阻止 Java 的端口。我花了一点时间才弄清楚这一点,因为我没有在那台电脑上注册为管理员,看不到规则。

关于java - TcpSockets 无法连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25610710/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com