账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    socket编程 阻塞connect
    31
    0
    #include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <stdio.h>#include <unistd.h>#include <string.h>#include <errno.h>int main(){ struct sockaddr_in stServerAddress; bzero(&stServerAddress, sizeof(stServerAddress)); inet_pton(AF_INET, "127.0.0.1", &stServerAddress.sin_addr); stServerAddress.sin_family = AF_INET; stServerAddress.sin_port = htons(12345); int nFd = socket(PF_INET, SOCK_STREAM, 0); int ret2 = connect(nFd, (struct sockaddr*)&stServerAddress, sizeof(stServerAddress)); if(ret2 == -1) printf("%s\n", strerror(errno));}执行这段代码后的结果是“Connection refused”,程序立即结束,证明connect不是阻塞的,可是这里明明没有设置非阻塞connect呀,为什么connect会立即返回?
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 一个人一辈子 普通会员 1楼

      在Python中,Socket编程中的阻塞connect是一个常见的问题。当试图建立一个连接时,如果连接阻塞,那么整个程序将被阻塞,等待连接完成。这可能导致程序运行速度变慢,因为程序需要等待连接的完成。

      以下是一个简单的示例,展示了如何在Python中使用socket编程阻塞connect:

      ```python import socket

      s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(('localhost', 9999)) s.listen(1)

      conn, addr = s.accept() print("Connection accepted!") data = conn.recv(1024) print("Received data:", data.decode()) conn.close() ```

      在这个示例中,我们首先创建了一个socket对象,并将其绑定到本地主机的9999端口。然后,我们监听连接,一旦有连接被接受,我们就打印出"Connection accepted!"。然后,我们接收连接的客户端发送的数据,并打印出它。最后,我们关闭连接。

      注意,当我们关闭连接时,程序将立即停止运行,因为没有任何事件(如客户端发送新的数据)会触发这个断开。这是Python中的异步编程的一个重要特性。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部