java.net.SocketException : Connection reset by peer: socket write error

标签 java sockets socketexception

java.net.SocketException: Connection reset by peer: socket write error
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(Unknown Source)
    at java.net.SocketOutputStream.write(Unknown Source)
    at java.io.DataOutputStream.write(Unknown Source)
    at java.io.DataOutputStream.writeUTF(Unknown Source)
    at java.io.DataOutputStream.writeUTF(Unknown Source)
    at SignUp.setUser(SignUp.java:225)
    at SignUp.jButton1_actionPerformed(SignUp.java:207)
    at SignUp.access$3(SignUp.java:201)
    at SignUp$4.actionPerformed(SignUp.java:135)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$200(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

Signup.java

/********************************************************/
/*                      SignUp                          */
/********************************************************/
import java.awt.*;
import java.awt.event.*;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;

import javax.swing.*;

/**
 * Summary description for SignUp
 */
public class SignUp extends JFrame {
    // Variables declaration
    private JLabel jLabel1;

    private JLabel jLabel2;

    private JLabel jLabel3;

    private JLabel jLabel4;

    private JTextField jTextField1;

    private JTextField jTextField2;

    private JTextField jTextField3;

    private JButton jButton1;

    private JButton jButton2;

    private JPanel contentPane;

    private String username;

    private String password;

    private String port;

    private Socket socket;

    private DataOutputStream dos;

    private DataInputStream dis;

    private ImageIcon image1;

    // End of variables declaration

    public SignUp() {
        super();
        initializeComponent();
        //
        // TODO: Add any constructor code after initializeComponent call
        //

        this.setVisible(true);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Windows Form Designer. Otherwise, retrieving design
     * might not work properly. Tip: If you must revise this method, please
     * backup this GUI file for JFrameBuilder to retrieve your design properly
     * in future, before revising this method.
     */
    private void initializeComponent() {
        image1 = new ImageIcon("SIGNUP.jpg");
        jLabel1 = new JLabel();
        jLabel2 = new JLabel();
        jLabel3 = new JLabel();
        jLabel4 = new JLabel(image1);
        jTextField1 = new JTextField();
        jTextField2 = new JTextField();
        jTextField3 = new JTextField();
        jButton1 = new JButton();
        jButton2 = new JButton();
        contentPane = (JPanel) this.getContentPane();

        //
        // jLabel1
        //
        jLabel1.setText("NAME");
        //
        // jLabel2
        //
        jLabel2.setText("PASSWORD");
        //
        // jLabel3
        //
        jLabel3.setText("PORT");
        //
        // jLabel4
        //
        //jLabel4.setText("jLabel4");
        //
        // jTextField1
        //
        jTextField1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                jTextField1_actionPerformed(e);
            }

        });
        //
        // jTextField2
        //
        jTextField2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                jTextField2_actionPerformed(e);
            }

        });
        //
        // jTextField3
        //
        jTextField3.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                jTextField3_actionPerformed(e);
            }

        });
        //
        // jButton1
        //
        jButton1.setText("SUBMIT");
        jButton1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                jButton1_actionPerformed(e);
            }

        });
        //
        // jButton2
        //
        jButton2.setText("RESET");
        jButton2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                jButton2_actionPerformed(e);
            }

        });
        //
        // contentPane
        //
        contentPane.setLayout(null);
        addComponent(contentPane, jLabel1, 55, 100, 100, 40);
        addComponent(contentPane, jLabel2, 55, 157, 100, 40);
        addComponent(contentPane, jLabel3, 55, 210, 100, 40);
        addComponent(contentPane, jLabel4, 25, 10, 300, 75);
        addComponent(contentPane, jTextField1, 189, 99, 120, 40);
        addComponent(contentPane, jTextField2, 188, 153, 120, 40);
        addComponent(contentPane, jTextField3, 190, 209, 120, 40);
        addComponent(contentPane, jButton1, 65, 267, 100, 40);
        addComponent(contentPane, jButton2, 189, 265, 100, 40);
        //
        // SignUp
        //
        this.setTitle("SignUp - extends JFrame");
        this.setLocation(new Point(0, 0));
        this.setSize(new Dimension(370, 366));
    }

    /** Add Component Without a Layout Manager (Absolute Positioning) */
    private void addComponent(Container container, Component c, int x, int y,
            int width, int height) {
        c.setBounds(x, y, width, height);
        container.add(c);
    }

    //
    // TODO: Add any appropriate code in the following Event Handling Methods
    //
    private void jTextField1_actionPerformed(ActionEvent e) {
        System.out
                .println("\njTextField1_actionPerformed(ActionEvent e) called.");
        // TODO: Add any handling code here

    }

    private void jTextField2_actionPerformed(ActionEvent e) {
        System.out
                .println("\njTextField2_actionPerformed(ActionEvent e) called.");
        // TODO: Add any handling code here

    }

    private void jTextField3_actionPerformed(ActionEvent e) {
        System.out
                .println("\njTextField3_actionPerformed(ActionEvent e) called.");
        // TODO: Add any handling code here

    }

    private void jButton1_actionPerformed(ActionEvent e) {
        System.out.println("\njButton1_actionPerformed(ActionEvent e) called.");
        // TODO: Add any handling code here
        username = jTextField1.getText();
        password = jTextField2.getText();
        port = jTextField3.getText();
        setUser(username, password, port);

    }

    private void jButton2_actionPerformed(ActionEvent e) {
        System.out.println("\njButton2_actionPerformed(ActionEvent e) called.");
        // TODO: Add any handling code here

    }

    public void setUser(String username, String password, String port) {
        try {
            new source();
            if (true) {
                socket = new Socket("localhost", 3306);
                dos = new DataOutputStream(socket.getOutputStream());
                source.gdelete();
                dos.writeUTF("Signup");
                dos.writeUTF("user");
                dos.writeUTF("pass");
                dos.writeUTF(port);
                dis = new DataInputStream(socket.getInputStream());
                String response = dis.readUTF();
                if (response.equalsIgnoreCase("success")) {
                    System.out.println("Success...");
                } else {
                    System.out.println("Failure...");
                }
            }
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }

    }

    //
    // TODO: Add any method code to meet your needs in the following area
    //

    // ============================= Testing ================================//
    // = =//
    // = The following main method is just for testing this class you built.=//
    // = After testing,you may simply delete it. =//
    // ======================================================================//
    public static void main(String[] args) {
        JFrame.setDefaultLookAndFeelDecorated(true);
        JDialog.setDefaultLookAndFeelDecorated(true);
        /*try {
            UIManager
                    .setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
        } catch (Exception ex) {
            System.out.println("Failed loading L&F: ");
            System.out.println(ex);
        }*/
        new SignUp();
    }
    // = End of Testing =

}

基本上在我的应用程序中尝试创建发送者和接收者。但我无法注册用户。不断收到此错误已尝试过在线解决方案,但没有帮助。

socket = new Socket("localhost", 3306);//when I change the port number I get an error saying connection refused.
dos = new DataOutputStream(socket.getOutputStream());
source.gdelete();
dos.writeUTF("Signup");//the exception is raised the moment I hit the next line
dos.writeUTF("user");
dos.writeUTF("pass");
dos.writeUTF(port);

最佳答案

连接被对等方重置通常意味着处理 TCP 连接远程端的程序已崩溃或退出,而未关闭其套接字端。在这种情况下,“TCP 连接的远程端”是您在 localhost:3306 连接到的任何服务器。

您在该问题的早期修订版中包含的一些代码表明,有一个 MySQL 服务器在 localhost:3306 上运行,但在 Signup() 中,您与该端口建立直接 TCP 连接并将数据写入套接字,而不是使用 JDBC。我怀疑问题是你正在连接到MySQL服务器,并且它从你的程序获取的数据与它期望从客户端获取的数据不匹配,并且它正在删除连接,导致“连接重置”消息。

如果您想与 MySQL 服务器通信,您应该使用 JDBC 和 MySQL 驱动程序。 Here is an example使用 JDBC 与 MySQL 服务器进行通信。特别注意示例中的readDataBase()函数;它显示了连接到服务器的正确方法。

关于java.net.SocketException : Connection reset by peer: socket write error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16402351/

相关文章:

Java Socket,绑定(bind)到本地端口

Java:RSA 算法的 key 不适合对称加密。

c++ - Linux 服务器,向 Windows 客户端发送文件(Socket)

Java 多播套接字在 Windows 上不起作用(SocketPermission 异常)

c++ - 在 Windows 上获取套接字超时值

java - Commons Net FTPClient 与 Mule 无限期挂起

java - 无法从池中获取资源(SocketTimeoutException :)

JavaFx:如何使立方体适应窗口大小调整

java - 使用正则表达式测试 Servlet 中的字符串

java - Gitlab 管道上的测试容器 "JedisConnectionException: Could not get a resource from the pool"