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)
但是当客户端只按下相当于""它断开的输入时
为什么什么时候没有按下它是不一样的""?
当我用指针指向函数时,我发现了一些东西并且不明白
我这样做了:
#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,它做了同样的事情,比较得到了与回调相同的地址.
据我所知,比较指针和常规变量将是错误的.