小编use*_*374的帖子

Python中的recv()

open_sockets = []

listening_socket = socket.socket( socket.AF_INET, socket.SOCK_STREAM )

listening_socket.bind( ("", 1234) )

listening_socket.listen(5)

while True:
    rlist, wlist, xlist = select.select( [listening_socket] + open_sockets, [], [] )
    for i in rlist:
        if i is listening_socket:
            new_socket, addr = listening_socket.accept()
            open_sockets.append(new_socket)
        else:
            data = i.recv(1024)
            if data == "":
                i.close()
                open_sockets.remove(i)
                print "Connection closed"
            else:
                i.send(data)
                print repr(data)
Run Code Online (Sandbox Code Playgroud)

现在我知道这是一个简单的服务器代码,可以处理几个客户端 - 唯一我不理解的是这两行:

        data = i.recv(1024)
        if data == "":
Run Code Online (Sandbox Code Playgroud)

我知道当客户端已经接受它时会转到另一个选项,该选项检查缓冲区中是否存在某些内容.我不明白为什么,当缓冲区中没有任何内容时,它继续并且不检查该行:

if data == "":
Run Code Online (Sandbox Code Playgroud)

但是当客户端只按下相当于""它断开的输入时

为什么什么时候没有按下它是不一样的""

python sockets

6
推荐指数
1
解决办法
3万
查看次数

指向c ++函数的指针

当我用指针指向函数时,我发现了一些东西并且不明白

我这样做了:

#include <stdio.h>

int callback(void)
{
   return 5;
}

void call(int (*cpmpare)(void))
{
    int x;
    x = cpmpare();
    printf("%d", x);
}

void main()
{
    int (*compare)(void);
    int *a, b;
    b = 5;
    a = &b;
    compare = callback;
    printf("%p\n", &callback);
    printf("%p\n", compare);
    call(&callback);
}
Run Code Online (Sandbox Code Playgroud)

而我做了compare = &callback相反compare = callback,它做了同样的事情,比较得到了与回调相同的地址.

为什么两种方式都有效?

据我所知,比较指针和常规变量将是错误的.

c++

3
推荐指数
1
解决办法
113
查看次数

标签 统计

c++ ×1

python ×1

sockets ×1