Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 客户端无法连接到服务器;引发IOException。简单的客户端/服务器问题_Java_Sockets_Ioexception - Fatal编程技术网

Java 客户端无法连接到服务器;引发IOException。简单的客户端/服务器问题

Java 客户端无法连接到服务器;引发IOException。简单的客户端/服务器问题,java,sockets,ioexception,Java,Sockets,Ioexception,我是一个初学者(正如你可能知道的),我在建立从非常简单的客户端到非常简单的服务器的连接时遇到了问题。我的服务器启动正常,因为它创建了一个监听端口43594的serversocket。但是,当我运行客户端尝试建立连接时,客户端在尝试连接时会引发IOException 我在业余时间做java是一种爱好,所以如果有人能帮助我了解发生了什么,哪里出了问题(或者我在哪里做对了),从而帮助我提高,我将不胜感激 这是我的服务器代码: package src.org; import java.io.FileI

我是一个初学者(正如你可能知道的),我在建立从非常简单的客户端到非常简单的服务器的连接时遇到了问题。我的服务器启动正常,因为它创建了一个监听端口43594的serversocket。但是,当我运行客户端尝试建立连接时,客户端在尝试连接时会引发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 localhost时,我得到一个响应;两侧的端口为43594,主机为本地端口。来自客户端的命令行响应为:

已创建客户端套接字 无法从以下位置获取i/o:localhost 错误:连接重置 按任意键继续

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


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

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

Yup-听起来很合理:)