我在java中的套接字有问题:我在桌面PC上有一台服务器,我有一个ServerSocket对象实例化:
ServerSocket socket = new ServerSocket(port);
其中" port"是一些港口。
此serverSocket接受客户端。此客户端是另一个应用程序java,它运行在连接到服务器PC的同一网络的另一台桌面PC上。在这个应用程序java中,我实例化了一个Socket对象,它连接到服务器PC的本地IP(例如:192.168.1.11)和serverSocket的端口。当我运行服务器和客户端时,客户端不连接到服务器。如果我在同一桌面PC上运行服务器和客户端,则客户端会设法连接到服务器。
我在考虑防火墙配置的问题,但我没有设法解决它。请帮帮我。
这是服务器代码:
//I will accept one client
ServerSocket server = new ServerSocket(19999);
Socket client = server.accept();
new Thread(new ManagerConnectionThread(client)).start(); //this thread manage the requests
ManagerConnectionThread是一个管理服务器和客户端之间通信的类:
//This code is on the server
OutputStreamWriter out = new OutputStreamWriter(client.getOutputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
这是客户代码:
public static void main(String[] args){
Socket client = new Socket(InetAddress.getByName("192.168.1.11"), 19999); //192.168.1.11 is IP of "server" pc
OutputStreamWriter out = new OutputStreamWriter(client.getOutputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
}
答案 0 :(得分:0)
您有路由器吗?如果是,您将需要配置一些端口转发并尝试通过外部地址进行访问,这意味着您将尝试通过指向您计算机的路由器进行连接。
此外,您可能需要对防火墙进行一些调整,有时我在学校做类似的事情,但是作为服务器,我使用的是基于Linux的OS,因此过程可能有所不同,但是我绝对需要允许输入/输出我正在使用的端口。
您可能会在这篇文章中找到类似的答案 Java Chat with TCP/IP over LAN
编辑:我找到了我的旧作业,并且肯定使用了外部地址(特别是因为我想在服务器在家的时候从学校访问它),所以我将连接到笔记本电脑的外部地址,然后在在路由器的设置中,我会将我正在使用的端口转发到服务器,服务器中允许特定端口的传入流量。