0

我是一个初学者(正如您可能知道的那样),我在建立从我非常简单的客户端到我非常简单的服务器的连接时遇到了问题。我的服务器启动良好,因为它创建了一个侦听端口 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 错误:连接重置 按任意键继续...

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

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

4

1 回答 1

1

你已经遗漏了很多代码。服务器中在接受的套接字上发送数据的部分。所以调用accept()的方法就退出了,socket被垃圾回收,关闭了,客户端一直在对连接的另一端做I/O,这是无效的,所以你得到了一个异常。

于 2013-11-15T09:38:20.660 回答