Python教程12
阿新 • • 發佈:2018-12-11
Python教程12
1.udp傳送資料:
import socket def main(): # 建立一個udp套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 第一個引數是ipv4協議,第二個引數是udp # 使用套接字傳送資料,第一個引數是傳送資料,第二個引數是一個元祖 # udp_socket.sendto(b"jnjhhjdik111jj5555", ("192.168.1.7", 8080)) # 使用b表示傳送資料流是bit while True:# 從鍵盤獲取資料 send_data = input("請輸入要傳送的資料:") if send_data == "exit": break udp_socket.sendto(send_data.encode("utf-8"), ("192.168.1.7", 8080)) # 多采用.encode("utf-8")設定資料流的編碼 # 關閉套接字 udp_socket.close() if __name__ == "__main__": main()
2.udp接收資料
importsocket def main(): # 1.建立套接字 udp_socket2 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 2.繫結本地資訊,如果一個網路程式不繫結,則系統會隨機分配 localaddr = ("", 7788) # ip地址和埠號,IP一般不用謝,表示本機的任何一個IP udp_socket2.bind(localaddr) while True: # 3.接收資料,1024表示接收的最大位元組數 recv_date = udp_socket2.recvfrom(1024)# 4.列印接收的資料 print(recv_date) # 接收到的元組資料(b'http://www.cmsoft.cn', ('192.168.1.7', 8080))前面是資料資訊,後面傳送方的IP和埠 recv_msg = recv_date[0] # 接收到的資料 send_addr= recv_date[1] # 傳送方的資訊,是個元組 print("傳送方資訊:%s 傳送的資料:%s" % (str(send_addr), recv_msg.decode("gbk"))) # 傳送的英文不用解,Windows預設傳送的gbk解碼,Ubuntu是utf-8 # 5.關閉套接字 udp_socket2.close() if __name__ == '__main__': main()
3.udp聊天工具
import socket def send_msg(udp_socket): """傳送資訊""" # 定義傳送的需要的資訊 dest_ip = input("請輸入對方的IP:") dest_port = int(input("請輸入對方埠號:")) send_data = input("請輸入需要傳送的資訊: ") udp_socket.sendto(send_data.encode("utf-8"), (dest_ip, dest_port)) def recv_msg(udp_socket): """接收資料""" recv_data = udp_socket.recvfrom(1024) print("傳送方的IP%s ,傳送的資訊%s" % (str(recv_data[1]), recv_data[0].decode("gbk"))) def main(): # 建立套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 繫結資訊 loacladdr = ("", 7788) udp_socket.bind(loacladdr) # 迴圈處理髮送接收資料 while True: print("--------------XXX聊天工具-------------") print("1 .傳送資訊") print("2 .接收資訊") print("3 .退出系統") op = input("請輸入功能:") # 傳送資料 if op == "1": send_msg(udp_socket) # 接收資料 elif op == "2": recv_msg(udp_socket) elif op == "0": break else: print("輸入有誤,請重新輸入......") # 關閉套接字 if __name__ == '__main__': main()
4.tcp_client傳送資訊
import socket def main(): # 1.建立套接字 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2.連線伺服器 # tcp_socket.connect(("192.168.1.7", 7890)) server_ip = input("請輸入伺服器IP:") server_port = int(input("請輸入伺服器的埠:")) server_addr = (server_ip, server_port) tcp_socket.connect(server_addr) # 3.傳送接收資料 send_data = input("請輸入要傳送的資料:") tcp_socket.send(send_data.encode("gbk")) # 4.關閉套接字 tcp_socket.close() if __name__ == "__main__": main()
5.tcp_server接收、傳送資料
import socket def main(): # 1.建立套接字 tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2.繫結資訊 tcp_server_socket.bind(("", 7890)) # 3.設定套接字為監聽狀態,預設都寫128 tcp_server_socket.listen(128) while True: print("等待一個客戶端來連線........") # 4.客戶端連線 new_client_socket, client_addr = tcp_server_socket.accept() print("列印連線的客戶端資訊:%s" % str(client_addr)) # 迴圈接收、傳送資訊 while True: # 5.接收/傳送客戶端資訊 recv_data = new_client_socket.recv(1024) print("列印接收到客戶端的資訊:%s" % recv_data.decode("gbk")) # 注意客戶端未傳送資料,表示客戶端close,(客戶端是不能傳送為空值得),有資料則需要伺服器處理 if recv_data: new_client_socket.send("伺服器接收成功......ok ....".encode("gbk")) # Windows用gbk,Linux用utf-8 else: break # 6.關閉套接字 new_client_socket.close() print("已經服務完畢......") tcp_server_socket.close() if __name__ == '__main__': main()
6.檔案下載client
import socket def main(): # 1.建立套接字 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2.獲取伺服器的IP和埠 dest_ip = input("請輸入伺服器IP:") dest_port = int(input("請輸入埠:")) # 3.連線伺服器 tcp_socket.connect((dest_ip, dest_port)) # 4.獲取下載的檔名 download_file_name = input("請輸入需要下載的檔名:") # 5.將檔名傳送給伺服器 tcp_socket.send(download_file_name.encode("gbk")) # 6.接收檔案中的資料 recv_data = tcp_socket.recv(1024) # 如果有讀取到資料,則下載,沒有讀取到則伺服器不傳送資料,接收到為空 if recv_data: # 7.儲存資料到檔案,新建檔案多用with open with open("[新]" + download_file_name, "wb") as f: f.write(recv_data) # 8.關閉套接字 tcp_socket.close() if __name__ == '__main__': main()
7.檔案下載server
import socket def send_file_2_client(new_client_socket, client_addr): file_name = new_client_socket.recv(1024).decode("gbk") print("客戶端s%需要下載的檔案:s%" % (str(client_addr), file_name)) print("開始傳送資料給客戶端.....") file_content = None # 開啟檔案 try: f = open(file_name, "rb") file_content = f.read() f.close() except Exception as ret: print("沒有下載的檔案。。。。") # 傳送檔案 if file_content: new_client_socket.send(file_content) def main(): tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) tcp_socket.bind(("", 7890)) tcp_socket.listen(128) while True: new_client_socket, client_addr = tcp_socket.accept() # 呼叫下載方法 send_file_2_client(new_client_socket, client_addr) new_client_socket.close() tcp_socket.close() if __name__ == '__main__': main()