關於伺服器3次握手4次揮手的記憶體釋放

2022-09-04 03:18:11 字數 1833 閱讀 4511

1、首先建立乙個伺服器

import socket

def function(newsocket):

"""建立乙個固定頁面"""

#接收客戶端請求

newsocket.recv(1024)

#給客戶端返回要執行的操作

#關閉套接字

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)

#給客戶端返回要執行的操作

#關閉套接字

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()

新增了紅色的**用於實現埠的重複使用,釋放伺服器記憶體,這時問題就解決了

3次握手和4次揮手

客戶端通過向伺服器端傳送乙個syn來建立乙個主動開啟,作為三路握手的一部分。客戶端把這段連線的序號設定為隨機數 a。伺服器端應當為乙個合法的syn回送乙個syn ack。ack 的確認碼應為 a 1,syn ack 包本身又有乙個隨機序號 b。最後,客戶端再傳送乙個ack。當服務端受到這個ack的時...

TCP的3次握手與4次揮手

三次握手建立連線 如上圖 黑框 所示,在最初兩端的tcp程序都處於closed狀態。host1主動開啟連線,而host2被動開啟連線。四次揮手取消連線 如上圖中藍色框的所示,在資料傳輸完畢後,host1和host2都處於established狀態,每個伺服器都能發出釋放鏈結的訊號,我們在這以host...

TCP的3次握手和4次揮手

三次握手建立連線 如上圖 黑框 所示,在最初兩端的tcp程序都處於closed狀態。host1主動開啟連線,而host2被動開啟連線。host2的tcp伺服器程序優先建立傳輸控制塊tcb,準備接受客戶程序的連線請求,然後將自己的狀態有colsed改為listen 收聽 狀態,等待客戶的連線請求 ho...