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...