1)建立客戶端套接字python
2)發送/接收數據正則表達式
3)關閉套接字編程
from socket import * # 1. 建立udp套接字 udp_socket = socket(AF_INET, SOCK_DGRAM) # 2. 準備接收方的地址 # '192.168.1.103'表示目的ip地址 # 8080表示目的端口 dest_addr = ('192.168.1.103', 8080) # 注意 是元組,ip是字符串,端口是數字 # 3. 從鍵盤獲取數據 send_data = input("請輸入要發送的數據:") # 4. 發送數據到指定的電腦上的指定程序中 udp_socket.sendto(send_data.encode('utf-8'), dest_addr) # 5. 關閉套接字 udp_socket.close() 在windows中運行「網絡調試助手」
from socket import * # 1. 建立udp套接字 udp_socket = socket(AF_INET, SOCK_DGRAM) # 2. 準備接收方的地址 dest_addr = ('192.168.236.129', 8080) # 3. 從鍵盤獲取數據 send_data = input("請輸入要發送的數據:") # 4. 發送數據到指定的電腦上 udp_socket.sendto(send_data.encode('utf-8'), dest_addr) # 5. 等待接收對方發送的數據 recv_data = udp_socket.recvfrom(1024) # 1024表示本次接收的最大字節數 # 6. 顯示對方發送的數據 # 接收到的數據recv_data是一個元組 # 第1個元素是對方發送的數據 # 第2個元素是對方的ip和端口 print(recv_data[0].decode('gbk')) print(recv_data[1]) # 7. 關閉套接字 udp_socket.close()
通常狀況下,在一臺電腦上運行的網絡程序有不少,爲了避免與其餘的網絡程序佔用同一個端口號,每每在編程中,udp的端口號通常不綁定;可是若是須要作成一個服務器端的程序的話,是須要綁定的。windows
from socket import * # 1. 建立套接字 udp_socket = socket(AF_INET, SOCK_DGRAM) # 2. 綁定本地的相關信息,若是一個網絡程序不綁定,則系統會隨機分配 local_addr = ('', 7788) # ip地址和端口號,ip通常不用寫,表示本機的任何一個ip udp_socket.bind(local_addr) # 3. 等待接收對方發送的數據 recv_data = udp_socket.recvfrom(1024) # 1024表示本次接收的最大字節數 # 4. 顯示接收到的數據 print(recv_data[0].decode('gbk')) # 5. 關閉套接字 udp_socket.close()
text = '我是文本'服務器
bytesText = text.encode()網絡
bytesText.decode()socket
1)TCP協議,傳輸控制協議(英語:Transmission Control Protocol,縮寫爲 TCP)是一種面向鏈接的、可靠的、基於字節流的傳輸層通訊協議,由IETF的RFC 793定義。tcp
2)TCP通訊須要通過建立鏈接、數據傳送、終止鏈接三個步驟。函數
3)TCP通訊模型中,在通訊開始以前,必定要先創建相關的連接,才能發送數據,相似於生活中,"打電話""編碼
通訊雙方必須先創建鏈接才能進行數據的傳輸,雙方都必須爲該鏈接分配必要的系統內核資源,以管理鏈接的狀態和鏈接上的傳輸。
雙方間的數據傳輸均可以經過這一個鏈接進行。
完成數據交換後,雙方必須斷開此鏈接,以釋放系統資源。
這種鏈接是一對一的,所以TCP不適用於廣播的應用程序,基於廣播的應用程序請使用UDP協議。
1)TCP採用發送應答機制:TCP發送的每一個報文段都必須獲得接收方的應答才認爲這個TCP報文段傳輸成功
2)超時重傳:發送端發出一個報文段以後就啓動定時器,若是在定時時間內沒有收到應答就從新發送這個報文段。
TCP爲了保證不發生丟包,就給每一個包一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。而後接收端實體對已成功收到的包發回一個相應的確認(ACK);若是發送端實體在合理的往返時延(RTT)內未收到確認,那麼對應的數據包就被假設爲已丟失將會被進行重傳。
3)錯誤校驗:TCP用一個校驗和函數來檢驗數據是否有錯誤;在發送和接收時都要計算校驗和。
4) 流量控制和阻塞管理:流量控制用來避免主機發送得過快而使接收方來不及徹底收下。
1)udp不須要建議相關的鏈接,只須要發送數據
2)tcp在通訊開始以前,必定要先創建相關的連接,才能發送數據
from socket import * # 建立socket tcp_client_socket = socket(AF_INET, SOCK_STREAM) # 目的信息 server_ip = input("請輸入服務器ip:") server_port = int(input("請輸入服務器port:")) # 連接服務器 tcp_client_socket.connect((server_ip, server_port)) # 提示用戶輸入數據 send_data = input("請輸入要發送的數據:") tcp_client_socket.send(send_data.encode("gbk")) # 接收對方發送過來的數據,最大接收1024個字節 recvData = tcp_client_socket.recv(1024) print('接收到的數據爲:', recvData.decode('gbk')) # 關閉套接字 tcp_client_socket.close()
1)socket建立一個套接字
2) bind綁定ip和port
3) listen使套接字變爲能夠被動連接
4) accept等待客戶端的連接
5) recv/send接收發送數據
from socket import * # 建立socket tcp_server_socket = socket(AF_INET, SOCK_STREAM) # 本地信息 address = ('', 7788) # 綁定 tcp_server_socket.bind(address) # 使用socket建立的套接字默認的屬性是主動的,使用listen將其變爲被動的,這樣就能夠接收別人的連接了 tcp_server_socket.listen(128) # 若是有新的客戶端來連接服務器,那麼就產生一個新的套接字專門爲這個客戶端服務 # client_socket用來爲這個客戶端服務 # tcp_server_socket就能夠省下來專門等待其餘新客戶端的連接 client_socket, clientAddr = tcp_server_socket.accept() # 接收對方發送過來的數據 recv_data = client_socket.recv(1024) # 接收1024個字節 print('接收到的數據爲:', recv_data.decode('gbk')) # 發送一些數據到客戶端 client_socket.send("thank you !".encode('gbk')) # 關閉爲這個客戶端服務的套接字,只要關閉了,就意味着爲不能再爲這個客戶端服務了,若是還須要服務,只能再次從新鏈接 client_socket.close()
listen後的套接字是被動套接字,用來接收新的客戶端的連接請求的,而accept返回的新套接字是標記這個新客戶端的
示例:
1) search 能夠匹配字符串中的任意位置,只要出現與正則表達式相匹配的表達式就行,group()以後返回匹配成功的部分,只能取第一塊符合的
2) findall 相似上一個,返回全部符合的
3) sub 先匹配,而後替換(替換的部分也能夠是一個函數)
ret = re.sub(r"\d+", 998, "python = 997")
python=998
import re ret = re.split(r":| ","info:xiaoZhang 33 shandong") print(ret)
輸出:
['info', 'xiaoZhang', '33', 'shandong']