【问题标题】:bind failed: EADDRINUSE (Address already in use)绑定失败:EADDRINUSE(地址已在使用中)
【发布时间】:2016-06-23 09:44:35
【问题描述】:

我正在尝试使用套接字通信从双方发送文件。我创建了一个 serverSocket 对象并创建了连接。 客户端 = serverSocket.accept(); 现在我可以从双方发送文件,但只能发送一次。当我断开连接并重新连接时,出现错误::绑定失败:EADDRINUSE(地址已在使用中)

我已正确关闭服务器套接字和客户端套接字。但我仍然收到此错误..

你能告诉别人我在哪里做错了吗?

protected String doInBackground(String... params) {
            try {
                CommonMethods.e("File Async task port", "File Async task port-> " + PORT);
                // init handler for progressdialog
                serverSocket = new ServerSocket();

                serverSocket.bind(new InetSocketAddress(PORT));
                serverSocket.setReuseAddress(true);
                Log.d(CommonMethods.Tag, "Server: Socket opened");
                client = serverSocket.accept();

                Log.d("Client's InetAddresssss  ", "" + client.getInetAddress());

                WiFiClientIp = client.getInetAddress().getHostAddress();

                ObjectInputStream ois = new ObjectInputStream(
                        client.getInputStream());
                WiFiTransferModal obj = null;
                // obj = (WiFiTransferModal) ois.readObject();
                String InetAddress;
                try {
                    obj = (WiFiTransferModal) ois.readObject();
                    InetAddress = obj.getInetAddress();
                    if (InetAddress != null
                            && InetAddress
                            .equalsIgnoreCase(FileTransferService.inetaddress)) {
                        CommonMethods.e("File Async Group Client Ip", "port-> "
                                + WiFiClientIp);
                        SharedPreferencesHandler.setStringValues(mFilecontext,
                                "WiFiClientIp", WiFiClientIp);
                        CommonMethods
                        .e("File Async Group Client Ip from SHAREDPrefrence",
                                "port-> "
                                        + SharedPreferencesHandler
                                        .getStringValues(
                                                mFilecontext,"WiFiClientIp"));
                        //set boolean true which identifiy that this device will act as server.
                        SharedPreferencesHandler.setStringValues(mFilecontext,
                                "ServerBoolean", "true");
                        ois.close(); 

                        serverSocket.close();

                        return "Demo";
                    }
                } catch (ClassNotFoundException e) {;
                // TODO Auto-generated catch block
                e.printStackTrace();
                }
                final Runnable r = new Runnable() {

                    public void run() {
                        // TODO Auto-generated method stub
                        mProgressDialog.setMessage("Receiving...");
                        mProgressDialog.setIndeterminate(false);
                        mProgressDialog.setMax(100);
                        mProgressDialog.setProgress(0);
                        mProgressDialog.setProgressNumberFormat(null);
                        mProgressDialog.setCancelable(false);
                        mProgressDialog
                        .setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                        mProgressDialog.show();
                    }
                };
                handler.post(r);
                Log.e("FileName got from socket on other side->>> ",
                        obj.getFileName());

                final File f = new File(
                        Environment.getExternalStorageDirectory() + "/"
                                + FolderName + "/"
                                + obj.getFileName());

                File dirs = new File(f.getParent());
                if (!dirs.exists())
                    dirs.mkdirs();
                f.createNewFile();

                System.out.println("dirs==========="+dirs);
                /*
                 * Recieve file length and copy after it
                 */
                this.ReceivedFileLength = obj.getFileLength();

                InputStream inputstream = client.getInputStream();


                copyRecievedFile(inputstream, new FileOutputStream(f),ReceivedFileLength);

                ois.close(); 
                serverSocket.close();

                this.Extension = obj.getFileName();
                this.EncryptedFile = f;

                return f.getAbsolutePath();
            } catch (Exception e) {
                Log.e(WiFiDirectActivity.TAG, e.getMessage());
                return null;
            }
        }

        @Override
        protected void onPostExecute(String result) {
            if (result != null) {
                FileServerAsyncTask FileServerobj = new
                        FileServerAsyncTask(mFilecontext,FileTransferService.PORT); 
                if(!result.equalsIgnoreCase("Demo")){


                    try{
                        serverSocket.close();
                    }catch (Exception e) {
                        // TODO: handle exception
                    }
                }
                else{

                    if(FileServerobj != null) { 
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
                            FileServerobj.executeOnExecutor (AsyncTask.THREAD_POOL_EXECUTOR, new String[] { null }); 

                        }
                        else FileServerobj.execute();

                    }

                }

            }

        }

【问题讨论】:

  • 请尝试分配null可能可以解决您的问题。
  • 感谢 ans .. 我做了但仍然是同样的错误 ..ois.close(); serverSocket.close();服务器套接字=空;客户端.close();客户=空;

标签: android android-wifi


【解决方案1】:

这个逻辑似乎很好。至于它是异步代码 - 我会说错误在此代码之外的某个地方。尝试检查您是否真的在打开新连接之前关闭连接(这样它们就不会在时间上重叠)。

【讨论】:

  • 我两次绑定并接受() serverSocket ..第一次获取 WiFiClientIp 和所有 .. 再次绑定以将文件发送到客户端,然后我正确关闭了 serverSocket 。我认为问题出在这里..我可以从客户端关闭 serverSocket ..
  • 你不能只从客户端关闭服务器套接字,但你可以从客户端发送一些消息(例如“退出”),然后如果服务器收到这样的消息 - 你可以关闭它
猜你喜欢
  • 2013-12-02
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 2018-04-01
  • 1970-01-01
  • 2019-07-29
相关资源
最近更新 更多