如何使客户端等待服务器套接字连接?

新的一个

我正在使用wifi direct在两个移动设备之间进行通信。我有安装套接字来发送和接收消息。如果我先启动服务器设备(所有者),然后再启动客户端设备(成员),则一切正常。我想以任何顺序启动任何设备,但仍然设法发送消息。

当前,客户端等待5秒钟,如果没有可用的连接,则它将停止寻找服务器。我希望客户端即使在超时后仍继续寻找服务器,直到找到服务器连接为止。我已尝试执行此操作,但尚未成功实现。

初始客户代码:

@Override
    public void run() {
        Socket socket = new Socket();
        try {
            socket.bind(null);
            socket.connect(new InetSocketAddress(address.getHostAddress(), SERVER_PORT), TIME_OUT);
            socketCreator = new SocketCreator(socket, handler);
            new Thread(socketCreator).start();
        } catch (IOException e) {
            e.printStackTrace();
            try {
                socket.close();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            return;
        }
    }

修改如下:

 @Override
    public void run() {
        Socket socket = new Socket();
        try {
            socket.setReuseAddress(true);
            socket.bind(null);
            while(!connectedToServer) {
                try {
                    socket.connect(new InetSocketAddress(address.getHostAddress(), SERVER_PORT),
                            TIME_OUT);
                    socketCreator = new SocketReadWriter(socket, handler);
                    new Thread(socketCreator).start();
                    connectedToServer = true;
                } catch (ConnectException e) {
                    Log.i(TAG,"Error while connecting. " + e.getMessage());
                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException e1) {
                        e1.printStackTrace();
                    }
                } catch (Exception e){
                    Log.i(TAG,"Exception "+e.getMessage());
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
            try {
                socket.close();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }
    }

我的代码中缺少什么?我该如何运作?

我不断收到此错误:

Exception java.io.IOException: fcntl failed: EBADF (Bad file number)
约翰尼v

您必须new Socket()每次创建一个无法连接到远程服务器会使套接字无效,无法进一步使用。

如果connect()失败,则将套接字的状态视为未指定。便携式应用程序应关闭插座并创建一个新插座以重新连接。http://man7.org/linux/man-pages/man2/connect.2.html

由于您是在Android上运行此程序-我猜您在尝试调用connect两次时未看到“套接字关闭”错误

@Override
public void run()
{
    connector: while (true)
    {
        Socket socket = new Socket();

        try
        {
            socket.connect(new InetSocketAddress("0.0.0.0", 9999), 2000);
            this.doSomethingElseWithConnectedSocket(socket);
            break connector; // break out of the while loop
        }
        catch (ConnectException e)
        {
            // ignore because worthless
        }

        try
        {
             socket.close();
        }
        catch(Throwable x)
        {
             // ignore
        }

        System.out.println("Unable to connect to server ");

        try
        {
            Thread.sleep(1000);
        }
        catch (InterruptedException e1)
        {
            // ignore
        }
    }
}

public void doSomethingElseWithConnectedSocket(Socket value)
{
     value.close(); // close for no good reason
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使客户端等待服务器套接字连接?

来自分类Dev

如何使客户端套接字等待服务器套接字

来自分类Dev

如何使服务器套接字广播到那里,并让客户端套接字检测并连接

来自分类Dev

服务器/客户端套接字连接

来自分类Dev

我如何让我的asyncio客户端调用套接字服务器并等待响应

来自分类Dev

如何让我的asyncio客户端调用套接字服务器并等待响应

来自分类Dev

使用Python使客户端套接字等待服务器套接字

来自分类Dev

当我无权访问服务器时,如何从客户端关闭套接字连接?

来自分类Dev

客户端突然断开连接后,如何使服务器套接字保持活动状态?

来自分类Dev

如何使服务器套接字广播在那里,并让客户端套接字检测并连接

来自分类Dev

如何使用url将python套接字客户端连接到服务器套接字?

来自分类Dev

将客户端套接字与服务器套接字连接时出现问题

来自分类Dev

PHP客户端套接字与C#套接字服务器的连接

来自分类Dev

如何使用客户端套接字作为服务器套接字python

来自分类Dev

等待客户端读取消息的套接字服务器

来自分类Dev

C ++ [UDP]如何跟踪服务器上所有已连接的(客户端)套接字连接?

来自分类Dev

两个客户端无法在套接字客户端-服务器连接中互相交谈

来自分类Dev

客户端在套接字关闭服务器连接之前,客户端打印一半数据

来自分类Dev

如何将一个客户端连接到多个服务器套接字?

来自分类Dev

如何使Java客户端使用套接字连接到不在我的计算机上的服务器?

来自分类Dev

如何重用打开的客户端连接与服务器上的分叉子进程(TCP/IP 套接字)

来自分类Dev

Python套接字服务器/客户端编程

来自分类Dev

C客户端/服务器套接字错误

来自分类Dev

套接字编程-简单的客户端/服务器

来自分类Dev

客户端js上的套接字服务器?

来自分类Dev

Java客户端/服务器套接字问题

来自分类Dev

Java TCP 客户端/服务器套接字

来自分类Dev

检查PHP套接字服务器中的断开连接客户端

来自分类Dev

客户端关闭连接时服务器套接字完成

Related 相关文章

  1. 1

    如何使客户端等待服务器套接字连接?

  2. 2

    如何使客户端套接字等待服务器套接字

  3. 3

    如何使服务器套接字广播到那里,并让客户端套接字检测并连接

  4. 4

    服务器/客户端套接字连接

  5. 5

    我如何让我的asyncio客户端调用套接字服务器并等待响应

  6. 6

    如何让我的asyncio客户端调用套接字服务器并等待响应

  7. 7

    使用Python使客户端套接字等待服务器套接字

  8. 8

    当我无权访问服务器时,如何从客户端关闭套接字连接?

  9. 9

    客户端突然断开连接后,如何使服务器套接字保持活动状态?

  10. 10

    如何使服务器套接字广播在那里,并让客户端套接字检测并连接

  11. 11

    如何使用url将python套接字客户端连接到服务器套接字?

  12. 12

    将客户端套接字与服务器套接字连接时出现问题

  13. 13

    PHP客户端套接字与C#套接字服务器的连接

  14. 14

    如何使用客户端套接字作为服务器套接字python

  15. 15

    等待客户端读取消息的套接字服务器

  16. 16

    C ++ [UDP]如何跟踪服务器上所有已连接的(客户端)套接字连接?

  17. 17

    两个客户端无法在套接字客户端-服务器连接中互相交谈

  18. 18

    客户端在套接字关闭服务器连接之前,客户端打印一半数据

  19. 19

    如何将一个客户端连接到多个服务器套接字?

  20. 20

    如何使Java客户端使用套接字连接到不在我的计算机上的服务器?

  21. 21

    如何重用打开的客户端连接与服务器上的分叉子进程(TCP/IP 套接字)

  22. 22

    Python套接字服务器/客户端编程

  23. 23

    C客户端/服务器套接字错误

  24. 24

    套接字编程-简单的客户端/服务器

  25. 25

    客户端js上的套接字服务器?

  26. 26

    Java客户端/服务器套接字问题

  27. 27

    Java TCP 客户端/服务器套接字

  28. 28

    检查PHP套接字服务器中的断开连接客户端

  29. 29

    客户端关闭连接时服务器套接字完成

热门标签

归档