日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python网络编程—TCP协议(一)

發布時間:2025/3/21 python 10 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python网络编程—TCP协议(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、TCP協議示意圖:


listen():監聽客戶端的連接,客戶端有鏈接,listen馬上就有返回。
accept():連接之后,會返回客戶端的信息(ip地址、端口號),如果沒有連接則一直堵塞。連接成功后,服務器就可以發數據,同時會創建一個新的socket
recvfrom:接收客戶端的數據,如果服務端沒有收到客戶端發來的數據,會滯留,下面的代碼不會執行。
read():讀取客戶端發過來的數據
write():將數據返回給客戶端
由new_socket來完成與客戶端數據的傳輸
如果new_socket關閉,則說明當前的這個客戶端請求結束,服務端服務完畢;如果有新的請求來了,服務器會創建新的new_socket與它通訊。
如果關掉第一個socket,則說明整個服務端程序關閉了

二、步驟

(1) socket創建一個套接字
(2) bind綁定ip和port
(3) listen使套接字變為可以被動鏈接
(4) accept等待客戶端的鏈接
(5) recv/send接收發送數據

三、代碼實現TCP協議

服務器端

from socket import *# todo 1、創建server-socket TCP協議 server_socket = socket(AF_INET, SOCK_STREAM)# todo 2、創建目標服務器,綁定一個IP和端口 服務器里面空的字符串代表server_socket綁定這臺機器下的任何ip地址 host_port = ('', 8088) server_socket.bind(host_port)# todo 3、監聽服務器的socket,listen讓socket處于被動。這時就可以接收客戶端的連接請求了 server_socket.listen(5) # 一般為5,表示客戶端線程掛起的個數# todo 4、等待客戶端的連接請求,當前函數是線程阻塞的函數,accept返回2個值,第一個:新的socket,第二個:客戶端地址 new_socket, client_addr = server_socket.accept() # todo 新創建的socket是server_socket中的子socket,只是和當前的客戶端(一個客戶端)收發數據# todo 5、服務器接收客戶端發送過來的數據,recv一般用于TCP協議的接收數據,recvfrom用于UDP data = new_socket.recv(1024) # data是字節數據print('服務器接收的數據是:', data.decode('utf-8'))# todo 6、服務器端發送數據給客戶端,在TCP中發送數據用send,UDP用sendto new_socket.send('THANK you'.encode('utf-8'))# 關閉套接字 new_socket.close() # todo new_socket關閉意味著當前客戶端的服務已經完成 server_socket.close() # todo server_socket關閉意味著整個服務器全部關閉

代碼注釋:

1、host_port = (’’, 8088)
server_socket.bind(host_port)
創建目標服務器,綁定一個IP和端口 服務器里面空的字符串代表server_socket綁定這臺機器下的任何ip地址**
2、new_socket, client_addr = server_socket.accept()
等待客戶端的連接請求,當前函數是線程阻塞的函數,accept返回2個值,第一個:新的socket,第二個:客戶端地址,
新創建的socket是server_socket中的子socket,只是和當前的客戶端(一個客戶端)收發數據**
3、data = new_socket.recv(1024) # data是字節數據
服務器接收客戶端發送過來的數據,recv一般用于TCP協議的接收數據,recvfrom用于UDP**
4、new_socket.send(‘THANK you’.encode(‘utf-8’))
服務器端發送數據給客戶端,在TCP中發送數據用send,UDP用sendto**

客戶端:

from socket import *# todo 1、客戶端、創建client-socket TCP協議 client_socket = socket(AF_INET, SOCK_STREAM)# todo 2、客戶端發送連接的請求(不是傳輸數據的請求,是創建連接的請求)# todo 目標服務器的ip和端口號 server_ip_port = ('192.168.1.112', 8088)# todo 發送連接請求,此時服務端產生了新的new_socket client_socket.connect(server_ip_port)#client_socket.close()# todo 客戶端發送請求,用send不用sendto,客戶端知道服務器的ip和端口,服務器也知道客戶端的端口和ip,因為是面向連接的 send_data = input('請輸入:') client_socket.send(send_data.encode('utf-8'))# todo 接收服務器返回的數據 recv_data = client_socket.recv(1024)print('客戶端接收到的服務器的數據為:', recv_data.decode(encoding='utf-8'))# todo 關閉socket client_socket.close()

代碼注釋:
send_data = input(‘請輸入:’)
client_socket.send(send_data.encode(‘utf-8’))
客戶端發送請求,用send不用sendto,客戶端知道服務器的ip和端口,服務器也知道客戶端的端口和ip,因為是面向連接的

總結

以上是生活随笔為你收集整理的python网络编程—TCP协议(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。