在Python中读取套接字时,os.read和socket.recv有什么区别吗?
假设我有一个套接字。那这两行代码有什么区别呢?
第一行:
os.read(some_socket.fileno(), 1024)
第二行:
some_socket.recv(1024)
...除了第一行在Windows上不工作这一点。换句话说,我能用第二行替代第一行吗?我有一个代码库在Windows上没怎么测试过,这导致了一些问题。
1 个回答
6
第一行代码使用了特定平台的文件描述符来读取套接字,所以这段代码只能在某些系统上运行。建议使用第二行代码,因为它是一种可以在多个平台上都能使用的方法,效果是一样的。
顺便说一下:如果你在做一些比较重要的事情,最好不要直接处理底层的套接字。因为底层套接字很难搞定,表面上看起来没问题,但其实有很多细节需要注意。这些细节在很多网络框架中已经解决了,所以没必要自己重新发明轮子。我推荐你试试twisted,这个框架相当不错。