繁体   English   中英

Java套接字-客户端和服务器IP地址

[英]Java socket - client and server IP address

我正在编写一个客户端和服务器之间具有TCP套接字连接的程序。 服务器启动时,我想显示客户端需要用来连接的IP和端口,而客户端连接时,我希望服务器显示客户端从哪个IP连接。 我对应该对每个命令使用哪个命令感到困惑:

getInetAdress()

getLocalAdress()

getRemoteSocketAdress()

编辑

我之前使用int port = 1234String IP = "localhost"进行测试并且可以正常工作,但是我只在一台PC上使用它,所以我认为如果在不同计算机上启动服务器和客户端,则localhost将无法工作。

这是服务器端:

int port = 1234;

...

public void start() {
        keepRunning = true;
        // create socket
        try {
            ServerSocket server = new ServerSocket(port);
            while (keepRunning) {
                display("Waiting for client connections on "
                        + server.getInetAddress().getLocalHost()
                                .getHostAddress() + ":" + port);
                Socket conn = server.accept();
                if (!keepRunning)
                    break;

                ClientThread t = new ClientThread(conn);
                cList.add(t);
                t.start();

这是客户:

int port = 1234;
String IP = "localhost";
//these variables can be changed from Client GUI before making connection

...


public boolean start() {
    try {
        socket = new Socket(IP, port);
    } catch (Exception e) {
        display("Error connectiong to server:" + e);
        return false;
    }
    try {
        sInput = new ObjectInputStream(socket.getInputStream());
        sOutput = new ObjectOutputStream(socket.getOutputStream());
    } catch (IOException e) {
        display("Exception creating new Input/output Streams: " + e);
        return false;
    }

当我启动服务器时,

display("Waiting for client connections on " + server.getInetAddress().getLocalHost().getHostAddress() + ":" + port);

返回此:

Waiting for client connections on 192.168.1.104:1234

这是我想要的那种,但我仍然无法得到它来显示端口。 1234是我使用的固定值,但我想使用ServerSocket server = new ServerSocket(0); 动态分配端口,然后当我启动客户端时,我只需输入从服务器获得的值并进行连接。

我试图在服务器的display行中使用server.getLocalPort() ,它返回55410或类似的内容,但是当我将此端口放入客户端进行连接时,它不起作用。 我收到Error connectiong to server:java.net.ConnectException: Connection refused: connect. 来自客户

要获取ServerSocket正在侦听的当前端口,请使用getLocalPort();。

http://download.java.net/jdk7/archive/b123/docs/api/java/net/ServerSocket.html#getLocalPort%28%29

getLocalPort

public int getLocalPort()

Returns the port number on which this socket is listening.

If the socket was bound prior to being closed, then this method will continue to return the port number after the socket is closed.

编辑:刚刚看到您的编辑。 您是否在尝试通过显式引用IP和端口进行连接? 如果是这样,并且仍然失败,则您的服务器计算机可能正在运行防火墙。 我先检查一下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM