首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java中套接字编程中的连接拒绝错误

问java中套接字编程中的连接拒绝错误
EN

Stack Overflow用户
提问于 2015-02-16 10:09:45
回答 3查看 1.2K关注 0票数 1

我试图执行的代码片段是使用jFileChooser选择一个文件并检索,将数据写入套接字。

代码语言:javascript
复制
  private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        File selectedFile;
        FileReader reader = null;
        BufferedReader in;
        try {
            final JFileChooser fc = new JFileChooser();
            fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
            txtSearch.setText((fc.showOpenDialog(CreateNode.this) == JFileChooser.APPROVE_OPTION) ? fc.getSelectedFile().toString() : txtSearch.getText());            
            if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
                //gets file from dialog
                selectedFile = fc.getSelectedFile();
                //makes sure files can be processed before proceeding
                if (selectedFile.canRead() && selectedFile.exists()) {
                    System.out.println("can read:"+selectedFile.canRead()+"exists:"+selectedFile.exists());
                    reader = new FileReader(selectedFile);

                }

            }
            in = new BufferedReader(reader);

            //inputLine recieves file text
            String inputLine = in.readLine();
            int LineNumber = 0;
            while (inputLine != null) {
                //LineNumber isn't needed, but it adds a line count on the left, nice
                LineNumber++;
                StringTokenizer tokenizer = new StringTokenizer(inputLine);
                Socket socket=new Socket("localhost",7788);


                //displays text file
                fileData.append(LineNumber + ": " + inputLine + "\n");
                System.out.println("connected:"+socket.isConnected());

                 // ss.accept();
                DataOutputStream dos4=new DataOutputStream(socket.getOutputStream());
                //next line in File opened
                dos4.writeUTF(LineNumber + ": " + inputLine + "\n");
                dos4.close();
                socket.close();
                ServerSocket ss=new ServerSocket(7788);
                Socket socket1=ss.accept();


               DataInputStream inp=new DataInputStream(socket1.getInputStream());
                //String msg=inp.readUTF();
                //System.out.println("msg:"+msg);

               String input = (String)inp.readUTF();
                System.out.println("inputline: "+input);
                ss.close();

            }
            //close stream, files stops loading
            in.close();

// TODO add your handling code here:
    }                                        
    catch (Exception e) {

        System.out.println("Exception e:"+e);
        e.printStackTrace();
        }

    }

我尝试过使用禁用防火墙并在netBeans中重新构建应用程序(我正在使用的IDE)。

错误信息是

代码语言:javascript
复制
 can read:trueexists:true
Exception e:java.net.ConnectException: Connection refused: connect
java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
    at java.net.Socket.connect(Socket.java:579)
    at java.net.Socket.connect(Socket.java:528)
    at java.net.Socket.<init>(Socket.java:425)
    at java.net.Socket.<init>(Socket.java:208)
    at com.design.CreateNode.jButton1ActionPerformed(CreateNode.java:194)
    at com.design.CreateNode.access$000(CreateNode.java:29)
    at com.design.CreateNode$1.actionPerformed(CreateNode.java:95)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6505)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
    at java.awt.Component.processEvent(Component.java:6270)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4861)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2719)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:682)
    at java.awt.EventQueue$3.run(EventQueue.java:680)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:696)
    at java.awt.EventQueue$4.run(EventQueue.java:694)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:693)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

我在google和stcakoverflow中也看到了一些建议,但它们都没有发现有用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-28 12:43:26

首先创建服务器套接字,然后创建套接字,这将创建客户端套接字实例,然后创建另一个接受连接的套接字对象。

代码语言:javascript
复制
ServerSocket ss=new ServerSocket(7777); 
            Socket socket=new Socket("localhost",7777); 
            Socket socket1=ss.accept();
票数 1
EN

Stack Overflow用户

发布于 2015-02-16 10:18:35

正如E_net4在注释中所暗示的,您在打开服务器之前正在创建一个客户端。

我的猜测是,由于ServerSocket.accept方法的阻塞功能,所以您采用了这种方法。更好的办法是

  1. 创建服务器套接字
  2. 听一听独立线程中的连接,在那里您可以安全地阻塞,而不会中断主流。
  3. 在服务器开始侦听连接后打开客户端套接字(Socket类)

这都是一个正确排序的问题

票数 2
EN

Stack Overflow用户

发布于 2015-02-16 10:16:39

当您试图连接到服务器套接字时,必须侦听它的连接。

尝试按以下顺序执行套接字操作:

代码语言:javascript
复制
            ServerSocket ss=new ServerSocket(7788); // Create listening socket.
            Socket socket=new Socket("localhost",7788);  // Connect to listening socket.
            Socket socket1=ss.accept(); // Accept incoming connection.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28538964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档