socket是計算機網絡通信的基本的技術之一。如今大多數基於網絡的軟件,如瀏覽器,即時通訊工具甚至是P2P下載都是基於Socket實現的。
網絡上兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一端稱為一個socket,應用程序通過socket向網絡中發出消息,或者接收消息。
socket是應用層與TCP/IP協議族的中間抽象層,它是一組接口,把復雜的TCP/IP協議族封裝為幾個簡單的接口提供給應用層調用,實現程序在網絡中的通信
socket僅僅是一個調用接口,為了方便程序員針對TCP或者UDP編程的接口。
socket的七個方法
服務端套接字綁定IP端口:bind()
客戶端套接字連接服務器:connect()
服務端套接字監聽:listen()
套接字發送消息:send()
服務端監聽套接字同意連接:accept()
套接字接受消息:recv()
套接字關閉連接:close()
創建socket
導入socket模塊: import socket
創建socket對象:socket.socket()
基本使用
注意: 服務端是通過accept生成的對等連接套接字來和客戶端通信的
注意: aeecpt和recv是會阻塞的,當沒有數據來的時候阻塞等數據過來
xshell 中命令執行
代碼執行:
寫一個不斷接受(while True)用戶連接的服務端,它的作用是把客戶端發來的數據原封不動的返回。
#服務端Linux\window系統下:處理命令並返回 import socket #聲明類型,生成socket鏈接對象 server = socket.socket() #監聽接收端口元組(本地,端口),綁定要監聽的端口 server.bind(('127.0.0.1', 8888)) #1.監聽 #2.“5”最大監聽數,允許多少人在排隊 server.listen(5) print("執行到這, 上面沒問題了") #循環鎖定訪問客戶端 while True: #1.等待客戶端 #會返回鏈接的標記位conn,與連接的地址 #2.客戶端同過conn,addr進行通話 #3.conn就是客戶端連接過來而在服務器端為其生成的一個連接實例 conn, addr = server.accept() #查看標記位與IP地址 print(conn, addr) #循環處理客戶端請求 while True: #1.接收數據,1024字節 #2.如果發不完會存在緩沖去,下次在發送。 #3.緩沖區每次最多發32768字節 #4.每個系統不同,超出數值會有限制。 data = conn.recv(1024) #返回 print(data) #判斷是否為空。 if not data: break #輸入一個值,與客戶端通訊 aa = input("--->>:") #解決報錯:TypeError: a bytes-like object is required, not 'str' bb = aa.encode() # 傳輸 conn.send(bb) #關閉鏈接 server.close()
寫一個客戶端來測試上面的服務端
#客戶端Linux、window系統下:輸入命令通過服務端返回 import socket #聲明協議類型,同時生成socket連接對象 client = socket.socket() #鏈接地址和端口,元組(本地,端口) client.connect(('127.0.0.1', 8888)) #使用input循環向服務端發送請求 while True: msg = input("-->>:").strip() if len(msg) == 0: continue #發送數據 b將字符串轉為bys類型 client.send(msg.encode("utf-8")) #接收服務器端的返回,需要聲明收多少,默認1024字節 id = 1024 data = client.recv(id) #打印data是recv的data print("recv: %s" % data) #關閉接口 client.close()
作者:含笑半步顛√
博客鏈接:https://www.cnblogs.com/lixy-88428977
聲明:本文為博主學習感悟總結,水平有限,如果不當,歡迎指正。如果您認為還不錯,歡迎轉載。轉載與引用請注明作者及出處。