网络编程
-
Python的底层网络交互模块有哪些?
答:我用过的有socket和socketserver,还有urllib,requests
-
socket与socketserver有什么区别?
答:socketserver是socket的再封装,socket无法支持多用户,而socketserver支持多用户多并发。
-
说一下socketserver的使用?
答:使用socketserver,先导入,然后创建一个请求处理类,比如叫MyTCPServer,让它继承自sockerserver的BaseRequestHandle,重写这个请求处理类里面的handle方法,然后我们实例化sockerserver模块下的
ThreadingTCPserver
,这样每一个连接进来,服务端都会开一个新的线程来处理,要注意这个类才能实现多并发,实例化TCPserver
是不能实现多并发的,然后就可以通过点调用对象的serve_forever()
方法。
- 什么是C/S架构。什么是B/S架构?
-
什么是粘包,为什么会粘包,怎么解决粘包?
答:粘包就是数据粘在一起,指的是我们调用了两次server.send,本来应该两次独立的发过去,但是有时候会出现这两次发送的数据一起发送过去了,实际只发送了一次的现象叫粘包,主要原因是接受方不知道消息之间的界限,发送的数据量比较小,两次发送数据的间隔又很短的话,就很容易粘包了,简单说粘包其实是我们的系统为了提高效率而做的,因为发一次比发两次效率高,这是一个底层的优化算法。解决粘包一个最直接,最low的办法就是两次发送数据之间进行sleep,间隔时间够长就不会粘包,但这会影响性能,初学者一般是这样做的,学了那个tcp的时候,我们可以在两次发送数据之间,加个
recv
,等待接收方发给确认信息过来,在进行下一次end
,因为recv
会进入一个等待状态,所以这样就可以解决粘包了。
-
socket
和socketserver
内置的方法有哪些?答:首先服务端相关的方法有,我们开发一个socket服务端,先使用
server=socket.socket()
创建socket对象,然后通过server.bind()
绑定IP和端口,在通过server.listen()
监听端口,接着通过server.accept()
会返回两个值,一个是客户端连过来而在服务端为其生成的一个实例,一个是地址位,然后服务端还可以接受发送数据,还有server.send
,server.recv()
方法,客户端的话,创建client客户端的socket对象之后,有client.connect
连接服务端的方法,这个方法接受一个元组作为参数,元组里面写上我们要连的IP和端口可以连上正在监听的服务端,然后也可以进行收发数据,最后用client.close()
关闭连接。基本上我用过的socket的方法就是这些,socketserver也是和socket的内置方法差不多的。
socketserver
的底层原理
-
用网络编程做过什么?
答:写过FTP