python之socket

因爲筆者是第一次接觸到socket,所以說的也不太清楚,以後有新的感悟就再續吧。
剛開始查閱資料,但文字實在看不懂,所以就在bilibili上找了視頻看例子黑馬Python就業班-網絡編程

再結合《python程序設計》第2版第10章的練習,對socket的運用上也有了一些心得

socket的成功使用需要兩個系統之間的配合:

客戶端A:ip 192.168.1.10

  • 接收端代碼:

  • 1.創建套接字(socket)

  • 2.綁定本地信息(ip和port)

  • 3.接收數據

  • 4.打印接收到的數據

  • 5.關閉套接字

#!/usr/bin/python
# -*_ coding: UTF-8 -*-
# 1.綁定端口用來接收數據
import socket
#創建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#綁定本地信息
udp_socket.bind(("",8888))
#接收數據
recv_data = udp_socket.recvfrom(1024)
#打印接收的數據
print(recv_data)
#關閉套接字
udp_socket.close()
#!/usr/bin/python
# -*- coding: utf-8 -*-
# 2.解析接收到的數據
import socket
#建立一個socket套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#綁定端口,空字符字符串表示本機任何可用ip地址
udp_socket.bind(("",8888))
#創建循環數據接收
while True:
    #接收1024字節的數據 recv、recvfrom
    recv_data = udp_socket.recvfrom(1024)
    #recv_data 這個變量中存儲的是一個元組(接收到的數據,(發送方的ip,port))
   	recv_msg = recv_data[0]  #存儲接收到的數據
    send_addr = recv_data[1]  #存儲發送方的地址信息
    #打印數據
    print("%s:%s"%(str(send_addr),recv_msg.encode("gbk"))
    #關閉套接字
    udp_socket.close()

書中接收端例子

# 書中發送端例子
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(("",5000))
while True:
    data, addr = s.recvfrom(1024)
    print("receiver message:{0} from PORT {1} on {2}",format(data.decode(), addr[1], addr[0]))
    if data.decode().lower() == "bye":
        break
s.close()
  • 客戶端B:ip 192.168.1.20

  • 1.創建socket套接字

  • 2.發送數據

  • 3.關閉套接字

#!/usr/bin/python
# -*- coding:utf-8 -*-
#1.普通發送數據
import socket
#創建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#發送數據
#udp_socket.sendto("hhh",("192.168.1.10",8888))
#發送數據處理,強制所有數據爲bytes類型
udp_socket.sendto(b"hhh",("192.168.1.10",8888))

#關閉套接字
udp_socket.close()
#!/usr/bin/python
# -*- coding:utf-8 -*-
# 2.從鍵盤接收發送的數據
import socket
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
socket_input = input("請輸入要發送的數據:")
#通過encode()對輸入的內容進行轉碼,
udp_socket.sendto(socket_input.encode("utf-8"), ("192.168.1.10", 8888))

udp_socket.close()
# 3.帶有退出功能的循環發送
import socket
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

#(發送端可選)綁定本地信息,不綁定的話系統會隨機分配一個端口
udp_socket.bind("", 7788)

#創建循環發送數據程序
while True:
    socket_input = input("請輸入要發送的數據:")
    
    udp_socket.sendto(socket_input.encode("utf-8"), ("192.168.1.10"), 8888)
    #如果輸入exit,則退出
    if socket_input == "exit":
    	break
    
    udp_socket.close()

書中發送端例子

# 書中發送端例子
import socket
import sys
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.sendto(sys.argv[1].encode(), ("192.168.1.10"), 5000)
s.close()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章