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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。