我正在尝试在作为客户端的笔记本电脑和作为服务器的PC之间建立TCP连接。 我的目标是使用服务器在两个Android设备之间发送消息。服务器具有公共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);
}
}
}
}
当我在服务器pc上运行两个Java文件时,连接正常。如果我用一台笔记本电脑设置本地Wi-Fi并使用另一台笔记本电脑连接到它,它也可以工作。 但是,当我从连接到互联网的笔记本电脑运行客户端文件时,我无法获得连接。 在服务器的防火墙上,我打开了许多用于连接的端口,而我用作客户端的笔记本电脑已禁用防火墙。 除了防火墙之外,我真的不知道要查看什么才能使连接运行。关于我的问题的原因和解决方案的任何想法?
答案 0 :(得分:0)
我找到了解决方案:Windows防火墙仍在阻止Java端口。我花了一点时间来弄明白这一点,因为我没有在该电脑上注册为管理员而且看不到规则。