我正在尝试建立一个简单的客户端和服务器连接。但是,服务器似乎没有适当地绑定到端口。
我用于服务器的代码如下:
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服务器客户端做错了什么呢?
答案 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是否会产生真正的影响(性能方面)。