您好,登錄后才能下訂單哦!
Socket
socket簡稱套接字,是進程間通信的一種方式。與其他的方式的進程間的通訊的方式不同的是,socket是實現了主機間進程間的通訊。我們網絡上的各種服務都是基于socket來完成的。例如QQ.微信。
怎么樣創建socket呢。
創建一個tcpsocket:
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
創建一個UDP類型的socket;
# # 創建套接字
# udpSocket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
UDP介紹
udp—–數據報文協議,是一個無連接的簡單的面向數據報的運輸層協議,UDP不提供可靠性,他只是將應用程序傳送給IP層的數據報文發送出去,并不保證能否達到目的地。由于UDP在傳輸的過程中不需要和服務器建立鏈接。且沒有超時重發的的機制。故而傳輸很快。
UDP 發送數據
import socket def main(): # 1. 創建套接字 udpSocket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 2. 設置目的端口和IP sendArr = ('192.168.31.174',65535) while True: sendData = input('請輸入你要發送的信息') if sendData == "exit": break # 3. 發送數據 # 發送數據,此處有一個坑是sendto()里面的參數必須二進制數據,不能直接傳字符串 udpSocket.sendto(sendData.encode('utf-8'),sendArr) # 4. 關閉套接字 udpSocket.close() if __name__ == '__main__': main()
UDP 接收數據
import socket def main(): # 1. 創建UDP套接字 udpSocket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 2. 綁定端口號 udpSocket.bind(("", 7789)) while True: # 3. 接收打印數據 recvData = udpSocket.recvfrom(1024) content, destInfo = recvData print("content is %s"%content) # print("content is %s"%content.decode("utf-8")) print("content is %s" % content.decode("gbk")) # windows默認編碼為gbk print(recvData) # 4. 關閉套接字 udpSocket.close() if __name__ == '__main__': main()
UDP簡單半雙工聊天實現
# Author:Maomao Li import socket def send_msg(udp_socket): """發送信息""" # 發送 # 獲取需要發送的內容 desc_ip = input("請輸入需要發送的目的IP:") desc_port = int(input("請輸入需要發送的目的端口:")) send_data = input("請輸入需要發送的數據:") udp_socket.sendto(send_data.encode("utf-8"), (desc_ip, desc_port)) def resv_msg(udp_socket): """接收數據""" resv_data = udp_socket.recvfrom(1024) resv_msg, resv_ip = resv_data print("%s:%s" % (resv_msg.decode("utf-8"), resv_ip)) def mian(): # 創建套接字 udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 綁定信息 udp_socket.bind(("",7789)) # 循環來進行處理事情 while True: op = print("請輸入功能 1發送 2接收 0退出:") if op == "1": send_msg(udp_socket) elif op == "2": resv_msg(udp_socket) elif op == "0": break else: print("輸入錯誤") if __name__ == '__main__': mian()
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。