gpt4 book ai didi

java - 客户端无法连接到服务器;抛出 IOException。简单的客户端/服务器问题

转载 作者:行者123 更新时间:2023-12-01 13:50:30 25 4
gpt4 key购买 nike

我是一个初学者(您可能会知道),并且在建立从非常简单的客户端到非常简单的服务器的连接时遇到问题。我的服务器启动正常,因为它创建了一个监听端口 43594 的服务器套接字。但是,当我运行客户端尝试建立连接时,客户端在尝试连接时会抛出 IOException。

我在业余时间做java作为一种爱好,所以如果有人能帮助我理解发生了什么,我哪里出错了(或者如果我什至在任何地方都做对了),我真的很感激从而帮助我进步。

这是我的服务器代码:

package src.org;

import java.io.FileInputStream;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

import java.net.*;
import java.io.*;

public class Server {

private static final Logger logger = Logger.getLogger(Server.class.getName());

private final static void createSocket(int portNumber) throws IOException
{
ServerSocket serverSocket = new ServerSocket(portNumber);
Socket clientSocket = serverSocket.accept();
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
}

public static void main(String... args)
{
logger.info("Starting server...");
Properties properties = new Properties();
logger.info("loading settings...");
try
{
properties.load(new FileInputStream("settings.ini"));
Constants.GAME_NAME = properties.getProperty("name");
Constants.PORT = Integer.valueOf(properties.getProperty("port"));
} catch(Exception ex)
{
ex.printStackTrace();
}
logger.info("Creating sockets...");
try
{
logger.info("Socket created. Listening on port: " + Constants.PORT);
createSocket(Constants.PORT);
} catch(Exception ex)
{
logger.log(Level.SEVERE, "Error creating sockets.", ex);
System.exit(1);
}
}

}

(据我所知)这似乎正在发挥作用。

这就是我认为的罪魁祸首类,即客户类:

import java.io.*;
import java.net.*;

public class Client {

//private static final String hostName = Constants.HOST_NAME;

//private static final int portNumber = Constants.PORT;

private static final String hostName = "localhost";

private static final int portNumber = 43594;

public static void main(String... args)
{
try (
Socket socket = new Socket(InetAddress.getLocalHost(), portNumber); // using localhost at the moment
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
) {
System.out.println("Client socket created.");
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String fromServer, fromUser;

while((fromServer = in.readLine()) != null)
{
System.out.println("Server:" + fromServer);
fromUser = stdIn.readLine();
if(fromUser != null) {
System.out.println("Client: " + fromUser);
out.println(fromUser);
}
}
} catch(UnknownHostException ex) {
System.err.println("Unknown host: " + hostName);
System.exit(1);
} catch(IOException ioe) {
System.err.println("Couldn't get i/o from: " + hostName);
System.out.println("Error:" + ioe.getMessage());
System.exit(1);
}
}
}

当我 ping 本地主机时,我得到响应;两边的端口都是43594,主机只是本地的。客户端的命令行响应是:

客户端套接字已创建无法从 localhost 获取 I/O错误:连接重置按任意键继续...

很抱歉,我知道这对你们许多人来说都是一个非常简单的修复,但我自己似乎无法找到答案或修复它。任何见解或帮助将不胜感激。干杯。

抱歉,如果我遗漏了任何其他重要信息。

最佳答案

您遗漏了大部分代码。服务器中在接受的套接字上发送数据的部分。所以调用accept()的方法就退出了,套接字被垃圾收集并关闭,客户端继续对连接的另一端进行I/O,这是无效的,所以你会得到一个异常。

关于java - 客户端无法连接到服务器;抛出 IOException。简单的客户端/服务器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19997549/

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