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

标签 java sockets ioexception

我是一个初学者(您可能会知道),并且在建立从非常简单的客户端到非常简单的服务器的连接时遇到问题。我的服务器启动正常,因为它创建了一个监听端口 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/

相关文章:

c - 1 台计算机,2 个程序,2 个 NIC 在 2 个不同的子网上,打开套接字/绑定(bind)端口在两个程序之间发生冲突,为什么?

c# - 由于 IOException,无法删除文件。它正在被另一个进程使用

java.io.IOException : HTTP response code: 400 for URL 异常

c++ - C++中的Daytime tcp服务器连接错误

java - 由 : java. lang.RuntimeException 引起:Parcelable 读取 Serialized 对象时遇到 IOException

java - Java.util.Scanner next(Pattern) 方法的问题/混淆

java - 如何在 VB.net 表单中打开 .jar?

java - "must be an array type but is resolved to char"井字游戏程序错误

java - Http Websocket 作为 Akka 流源

python - python中使用select从多个连接接收数据