【问题标题】:Java swing client server issueJava swing客户端服务器问题
【发布时间】:2018-10-20 00:18:37
【问题描述】:

我要做什么

客户端/服务器应用程序: 客户端打开一个带有“读取”按钮的 GUI。 单击它将打开一个新框架,其中包含一些要阅读的文章。在这个阶段简短的String。

摘要:

  • 启动服务器和客户端后,客户端将看到带有按钮的框架。
  • 作为响应,我希望服务器根据我单击的操作向我发送特定/不同的内容。

我尝试了什么

在目前的开发阶段,我遇到了这个错误消息:

Exception in thread "main" java.net.SocketException: Software caused connection abort: socket write error

这是服务器类:

public class StartServer {


    public static void main(String[] argv) throws Exception {

        @
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("Server started");


        while (true) {

            List<String> receive = new ArrayList<String>();

            // Wait for client to connect
            Socket aNewClientSocket = serverSocket.accept();

            System.out.println("Server-Client connexion established!!");

            ObjectInputStream toReceiveFromClient = new ObjectInputStream(aNewClientSocket.getInputStream());
            receive = (List<String>) toReceiveFromClient.readObject();

            System.out.println(aNewClientSocket.getLocalPort());
            System.out.println(aNewClientSocket.getInetAddress());

            switch (receive.get(0)) {
            case "Reader button click":
                List<Object> toSend = new ArrayList<Object>();
                Article a=new Article();
                a.setTitle("New Title");
                toSend.add(a);
                ObjectOutputStream objectWayToSend = new ObjectOutputStream(aNewClientSocket.getOutputStream());
                objectWayToSend.writeObject(toSend);
                objectWayToSend.flush();


            default:
                throw new IllegalArgumentException("Bad request from client!!");
            }

客户相关方法:

    public void sendToServer(List<String> toSend) throws UnknownHostException, IOException {
        try {


        Socket socket = new Socket("localhost", 9999);
        ObjectOutputStream objectWayToSend = new ObjectOutputStream(socket.getOutputStream());

        objectWayToSend.writeObject(toSend);
        objectWayToSend.flush();

        objectWayToSend.close();

        }
        catch(Exception e) {
            JOptionPane.showMessageDialog(frame, "The server is offline or connection can't be establish!");
        }
    }

    @SuppressWarnings("unchecked")
    public List<Object> receiveFromServer() throws UnknownHostException, IOException {
        List<Object> receive = new ArrayList<Object>();
        try {

            Socket socket = new Socket("localhost", 9999);
        ObjectInputStream objectToGet = new ObjectInputStream(socket.getInputStream());

        receive=(List<Object>) objectToGet.readObject();



        }
        catch(Exception e) {
            JOptionPane.showMessageDialog(frame, "The server is offline or connection can't be establish!");
        }
        return receive;

GUI 中引用的按钮

    btnCiteste = new JButton("Read");
            btnCiteste.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent arg0) {
                    List<String> toSend = new ArrayList<String>();
                    toSend.add("Read");
                    try {
                        sendToServer(toSend);
                        List<Object> received= receiveFromServer();
                        //new ArticoleReaderFrame ();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });

【问题讨论】:

    标签: java sockets client-server objectinputstream objectoutputstream


    【解决方案1】:

    您在完成发送后但在开始接收之前关闭客户端中的OutputStream。这就是您的问题的原因,因为关闭 OutputStream 也会关闭底层 Socket。

    引用Official reasons for “Software caused connection abort: socket write error”

    【讨论】:

    • 非常感谢!现在它工作了,但它有一个问题。按下按钮后,应用程序冻结。我的服务器端有什么包吗?
    • 我希望您再问一个问题,并将其链接到此处以保持内容分开。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 2011-05-26
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多