gpt4 book ai didi

java - 在Java中通过IP连接到服务器时出现ConnectException

转载 作者:行者123 更新时间:2023-12-02 08:24:16 25 4
gpt4 key购买 nike

我用java编写了一个简单的客户端-服务器程序。当我创建一个像
这样的套接字时Socket socket = new Socket("localhost",7000);

我能够连接到服务器并将数据(任何控制台输入)传输到服务器,但是当我在套接字中传递本地主机 Ip(127.0.0.1) 时,就像

 Socket socket = new Socket("127.0.0.1",7000);

我收到以下错误错误:

java.net.ConnectException: Connection refused: connect

为什么我会得到这个。

这是我的服务器端代码

public class SocketServer {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {

new SocketServer();

// TODO code application logic here
}

public SocketServer(){

try {
ServerSocket sSocket = new ServerSocket(7000);
System.out.println("Server started at: " + new Date());


//Wait for a client to connect
Socket socket = sSocket.accept();

//Create the streams
PrintWriter output = new PrintWriter(socket.getOutputStream(), true);
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));

//Tell the client that he/she has connected
output.println("You have connected at: " + new Date());

//Loop that runs server functions
while(true) {
//This will wait until a line of text has been sent
String chatInput = input.readLine();
System.out.println(chatInput);
}
} catch(IOException exception) {
System.out.println("Error: " + exception);
}


}

这是我的客户端代码

public class ClientSocket {

/**
* @param args the command line arguments
*/
public static void main(String[] args) throws UnknownHostException {
// TODO code application logic here

new ClientSocket();
}
public ClientSocket() throws UnknownHostException
{
//We set up the scanner to receive user input
Scanner scanner = new Scanner(System.in);

try {
//Socket socket = new Socket("localHost",7000);//works Fine
Socket socket = new Socket("127.0.0.1",7000);//Gives error
PrintWriter output = new PrintWriter(socket.getOutputStream(), true);
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));

//This will wait for the server to send the string to the client saying a connection
//has been made.
String inputString = input.readLine();
System.out.println(inputString);
//Again, here is the code that will run the client, this will continue looking for
//input from the user then it will send that info to the server.
while(true) {
//Here we look for input from the user
String userInput = scanner.nextLine();
//Now we write it to the server
output.println(userInput);
}
} catch (IOException exception) {
System.out.println("Error: " + exception);
}
}

}

这是我的/etc/hosts 文件

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host

# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
127.0.0.1 localhost
127.0.0.1 localhost

最佳答案

当您创建Socket时,您将其绑定(bind)到某个地址。在您的情况下,您将其绑定(bind)到 localhost,它与 127.0.0.1 相同,但地址不同(而 localhost 应始终解析到127.0.0.1)。您的应用程序看到连接尝试,但它也看到它不应该监听该地址,因此它拒绝连接。

尝试将您的服务器套接字绑定(bind)到 127.0.0.1 甚至 0.0.0.0 (使用 0.0.0.0,您告诉它监听所有传入连接(127.0.0.1localhost 和您的 LAN IP 地址/主机名)。

Here's some more information about this.

查看服务器和客户端后,您可以在服务器端尝试以下操作:

ServerSocket serverSocket = new ServerSocket();
serverSocket.bind(new InetSocketAddress("127.0.0.1", 7000));

关于java - 在Java中通过IP连接到服务器时出现ConnectException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29840451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com