关于服务器3次握手4次挥手的内存释放
1、首先创建一个服务器
import socket
def function(newsocket):
"""创建一个固定页面"""
#接收客户端请求
newsocket.recv(1024)
#给客户端返回要执行的操作
requiest = "http/ 1.1 200 OK\r\n"
requiest += "\r\n"
requiest += "<h1>hahaha<h1>"
newsocket.send(requiest.encode("utf-8"))
#关闭套接字
newsocket.close()
def main():
"""创建一个tcp服务器"""
#创建套接字
tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#绑定本地信息
tcp_socket.bind(("",4523))
#将套接字变为被动状态listen
tcp_socket.listen(1024)
#设置堵塞,等待客户端解堵塞
while True:
new_socket,cliendaddr = tcp_socket.accept()
#实现页面功能
function(new_socket)
#关闭套接字
tcp_socket.close()
if __name__ == '__main__':
main()
以上是一个没有释放内存的服务器,在二次执行时会出现以下问题

原因是在四次挥手时,服务器端口没有释放内存
解决办法:
import socket
def function(newsocket):
"""创建一个固定页面"""
#接收客户端请求
newsocket.recv(1024)
#给客户端返回要执行的操作
requiest = "http/ 1.1 200 OK\r\n"
requiest += "\r\n"
requiest += "<h1>hahaha<h1>"
newsocket.send(requiest.encode("utf-8"))
#关闭套接字
newsocket.close()
def main():
"""创建一个tcp服务器"""
#创建套接字
tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcp_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR)
#绑定本地信息
tcp_socket.bind(("",4523))
#将套接字变为被动状态listen
tcp_socket.listen(1024)
#设置堵塞,等待客户端解堵塞
while True:
new_socket,cliendaddr = tcp_socket.accept()
#实现页面功能
function(new_socket)
#关闭套接字
tcp_socket.close()
if __name__ == '__main__':
main()
添加了红色的代码用于实现端口的重复使用,释放服务器内存,这时问题就解决了
本文来自博客园,作者:hl爱编程,转载请注明原文链接:https://www.cnblogs.com/hlprogrammer/p/12872003.html

浙公网安备 33010602011771号