带套接字的应用java

时间:2017-04-29 13:53:27

标签: java

我在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()));
}

1 个答案:

答案 0 :(得分:0)

您有路由器吗?如果是,您将需要配置一些端口转发并尝试通过外部地址进行访问,这意味着您将尝试通过指向您计算机的路由器进行连接。

此外,您可能需要对防火墙进行一些调整,有时我在学校做类似的事情,但是作为服务器,我使用的是基于Linux的OS,因此过程可能有所不同,但是我绝对需要允许输入/输出我正在使用的端口。

您可能会在这篇文章中找到类似的答案 Java Chat with TCP/IP over LAN

编辑:我找到了我的旧作业,并且肯定使用了外部地址(特别是因为我想在服务器在家的时候从学校访问它),所以我将连接到笔记本电脑的外部地址,然后在在路由器的设置中,我会将我正在使用的端口转发到服务器,服务器中允许特定端口的传入流量。