无法打开套接字服务器

时间:2013-04-12 18:19:49

标签: java sockets

我正在尝试建立一个简单的客户端和服务器连接。但是,服务器似乎没有适当地绑定到端口。

我用于服务器的代码如下:

class Server extends Thread
{
    public boolean running = true;

    public Server(Main main) throws IOException
    {
        super();
        ServerSocket server_sock = new ServerSocket(8123);

        while (running)
        {
            new Connector(server_sock.accept(), main);
        }
        server_sock.close();
    }
}

class Connector extends Thread
{
    public Connector(Socket c)
    {
        super();
        system.out.println("Connecting"+c.getRemoteSocketAddress()+":"+c.getLocalPort());
        c.setKeepAlive(true);
        //wait for the connection to end
        system.out.println("Disconnecting"+c.getRemoteSocketAddress()+":"+c.getLocalPort());
    }
}

客户端相当简单,我只想连接到服务器(下面显示的行是通过其主程序中的另一个程序运行的):

s = new Socket("127.0.0.1", 8123); // Start
s.close(); // Stop

会发生什么:服务器运行并且不会抛出任何异常。希望我在客户端运行异常Exception in thread "main" java.net.ConnectException: Connection refused: connect

所以我做了一个简单的python客户端&用于检查Java服务器/客户端的服务器对:

服务器:

from socket import *

s = socket(AF_INET, SOCK_STREAM)
s.bind(('', 8123))
s.listen(1)
conn, addr = s.accept()
print("CONNECTED: ", addr)
conn.close()

客户端:

from socket import *

s = socket(AF_INET, SOCK_STREAM)
s.connect(('localhost', 8123))
s.close()

我用python客户端测试了python服务器作为一个健全性测试,它运行得很好。我用java客户端测试了python服务器,他们都合作得很好。但是,python客户端和java系列不起作用。我的python服务器提供错误:

Traceback (most recent call last):
  File "C:\Users\SIGABRT\Desktop\tcp.py", line 4, in <module>
    s.connect(('localhost', 8123))
ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it

这通常意味着服务器未正确启动。那我在Java服务器客户端做错了什么呢?

1 个答案:

答案 0 :(得分:0)

我有同样的问题。对我来说,这很有帮助

s = new Socket("localhost", 8123);

我想知道为什么它不适用于IP ......

解释

至少在我的Ubuntu系统上,似乎new ServerSocket(port)建立了与IPv6的连接 - “127.0.0.1”是IPv4,无法连接到正在设置的套接字。另一种方法是使用

初始化服务器套接字
new ServerSocket(port, 32, Inet4Address.getByName("127.0.0.1"));

我不知道在使用环回地址时,使用IPv4 over IPv6是否会产生真正的影响(性能方面)。