0
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)

注册.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);
4

2 回答 2

5

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

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

如果你想与 MySQL 服务器通信,你应该使用 JDBC 和 MySQL 驱动程序。这是一个使用 JDBC 与 MySQL 服务器通信的示例。特别注意readDataBase()示例中的功能;它显示了连接到服务器的正确方法。

于 2013-05-06T16:06:32.120 回答
0

此异常的通常原因是写入已被对等方关闭的连接。换句话说,应用程序协议错误。当您似乎直接写入 MySQL 端口时,这并不奇怪。使用 JDBC。

其他可能性包括远程应用程序崩溃、防火墙、电缆拉断等。

于 2013-05-06T23:10:57.527 回答