1. 程式人生 > >Python3.6 scoket練習筆記

Python3.6 scoket練習筆記

scoket連線過程:

根據連線啟動的方式以及本地套接字要連線的目標,套接字之間的連線過程可以分為三個步驟:伺服器監聽,客戶端請求,連線確認。
(1)伺服器監聽:是伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連線的狀態,實時監控網路狀態。
(2)客戶端請求:是指由客戶端的套接字提出連線請求,要連線的目標是伺服器端的套接字。為此,客戶端的套接字必須首先描述它要連線的伺服器的套接字,指出伺服器端套接字的地址和埠號,然後就向伺服器端套接字提出連線請求。
(3)連線確認:是指當伺服器端套接字監聽到或者說接收到客戶端套接字的連線請求,它就響應客戶端套接字的請求,建立一個新的執行緒,把伺服器端套接字的描述發給客戶端,一旦客戶端確認了此描述,連線就建立好了。而伺服器端

套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連線請求。

服務端:

# -*- coding: UTF-8 -*-
#服務端
import socket
s = socket.socket() #生成套接字
host = socket.gethostname() #獲取本機地址,或直接用127.0.0.1
port = 25365 #埠
s.bind((host,port)) #繫結地址到套接字,這裡引數使用元組
s.listen(5) #最大連線數
conn, addr = s.accept() #與客戶端連線線路

while True:
    try:
        print(addr,'等待中.....')
        client_data = conn.recv(1024)  #接收訊息
        print("客戶端:",client_data)
        send_data = client_data.upper()#處理接受到的訊息
        conn.send(send_data)#傳送訊息
    except Exception:
        break #異常直接退出
conn.close()#關閉連線


客戶端:
# -*- coding: UTF-8 -*-
#客戶端
import socket
s = socket.socket() #生成套接字
host = socket.gethostname() #獲取本機地址,或直接用127.0.0.1
port = 25365 #埠
s.connect((host,port)) #繫結地址到套接字,這裡引數使用元組

while True:
    send_data = input("=>:").strip() #等待客戶端輸入
    if len(send_data) == 0: continue #防止服務端死迴圈
    #客戶端傳送訊息
    s.sendall(bytes(send_data,encoding='utf-8'))#轉換為位元組
    #接受服務端返回資料
    server_reply = s.recv(1024)
    print(str(server_reply,encoding="utf-8"))#轉為字串輸出
s.close()

附上函式使用說明:

伺服器端套接字
s.bind()
繫結地址(host,port)到套接字, 在AF_INET下,以元組(host,port)的形式表示地址。
s.listen()
開始TCP監聽。backlog指定在拒絕連線之前,作業系統可以掛起的最大連線數量。該值至少為1,大部分應用程式設為5就可以了。
s.accept()
被動接受TCP客戶端連線,(阻塞式)等待連線的到來

客戶端套接字
s.connect()
主動初始化TCP伺服器連線,。一般address的格式為元組(hostname,port),如果連接出錯,返回socket.error錯誤。
s.connect_ex()
connect()函式的擴充套件版本,出錯時返回出錯碼,而不是丟擲異常


公共用途的套接字函式
s.recv()
接收TCP資料,資料以字串形式返回,bufsize指定要接收的最大資料量。flag提供有關訊息的其他資訊,通常可以忽略。
s.send()
傳送TCP資料,將string中的資料傳送到連線的套接字。返回值是要傳送的位元組數量,該數量可能小於string的位元組大小。
s.sendall()
完整發送TCP資料,完整發送TCP資料。將string中的資料傳送到連線的套接字,但在返回之前會嘗試傳送所有資料。成功返回None,失敗則丟擲異常。
s.recvfrom()
接收UDP資料,與recv()類似,但返回值是(data,address)。其中data是包含接收資料的字串,address是傳送資料的套接字地址。
s.sendto()
傳送UDP資料,將資料傳送到套接字,address是形式為(ipaddr,port)的元組,指定遠端地址。返回值是傳送的位元組數。
s.close()
關閉套接字
s.getpeername()
返回連線套接字的遠端地址。返回值通常是元組(ipaddr,port)。
s.getsockname()
返回套接字自己的地址。通常是一個元組(ipaddr,port)
s.setsockopt(level,optname,value)
設定給定套接字選項的值。
s.getsockopt(level,optname[.buflen])
返回套接字選項的值。
s.settimeout(timeout)
設定套接字操作的超時期,timeout是一個浮點數,單位是秒。值為None表示沒有超時期。一般,超時期應該在剛建立套接字時設定,因為它們可能用於連線的操作(如connect())
s.gettimeout()
返回當前超時期的值,單位是秒,如果沒有設定超時期,則返回None。
s.fileno()
返回套接字的檔案描述符。
s.setblocking(flag)
如果flag為0,則將套接字設為非阻塞模式,否則將套接字設為阻塞模式(預設值)。非阻塞模式下,如果呼叫recv()沒有發現任何資料,或send()呼叫無法立即傳送資料,那麼將引起socket.error異常。
s.makefile()
建立一個與該套接字相關連的檔案

相關推薦

Python3.6 scoket練習筆記

scoket連線過程: 根據連線啟動的方式以及本地套接字要連線的目標,套接字之間的連線過程可以分為三個步驟:伺服器監聽,客戶端請求,連線確認。 (1)伺服器監聽:是伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連線的狀態,實時監控網路狀態。 (2)客戶端請求

python3.6基礎學習筆記——語法基礎到Tkinter模組到多程序(持續更新中。。。)

基本算數運算子:   +:加  -:減  *:乘法  /:浮點數除法  %:取餘運算  **:冪運算 線上畫流程圖網站:   processon.com 常用的基礎函式:   round(value)函式    # 將value的值4舍5入到整數   int(value)函式  &nbs

CentOS7系統自帶Python2.X安裝Python3.6.2——個人筆記

前言 自學Python,安裝CentOS後自帶Python2.X,由於現階段教程、趨勢是Python3.X,故做此次操作。 1、環境 VM虛擬機器,CentOS7,自帶Python2.7.5,安裝Python3.6.2。 2、下載Python3.6.2安裝包 # wget

使用Docker搭建Anaconda Python3.6練習環境

文章作者:Tyan 部落格:noahsnail.com  |  CSDN  |  簡書 最近在看Python 3的相關內容,由於電腦裡已經裝了Anaconda 2.7,因此就在Docker裡搭建了一個Anaconda Python3.6的練習環境。Docke

Python學習筆記-編譯安裝Python3.6.1 + iPython

python由於系統已有2.6的python,最好不好修改系統的版本,使用編譯安裝下載Python3.6.1包wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz安裝依賴:yum -y install readline-devel解壓

JavaScript練習筆記整理·3 - 6.25

fat 題目 最優 app pread 以及 值類型 循環 return 歡迎和大家一起來討論~ 基礎練習(1): 我的解答為: function array_diff(a, b) { if (b == "") return a; return a

JavaScript練習筆記整理·4 - 6.26

math 參數表 兩個 接收 strong middle 沒有 [] 判斷 基礎練習(1): 我的解答為: function getMiddle(s) { if(s.length%2 == 0) { return s.charAt(s.length/2-1

python3.6 集合筆記(一)

python 集合 慢慢體會到,在學習或者解決一個問題的時候,首先要盡量理解透問題本身涉及到的相關概念,再去進一步分析解決具體問題,即可事半功倍。 比如,對於編程語言裏面的集合問題,以python語言為例(在此順便復習下關於集合本身的東西)。而集合本身在數學領域具有無可比擬的特殊重要性。在數學學科上集合的分類

centos7+python3.6+nginx+uwsgi+django2的搭建筆記

生命周期 主動 ron 大量 pidfile 技術分享 順序 multi 筆記 公司需上線一套python編寫的代碼,需要給搭建一套環境 ,本次采用centos7+python3.6+nginx+uwsgi2+django2+mysql

python3.6。爬蟲學習入門筆記

爬蟲 前提知識: URL HTTP協議 web前端,html css js ajax re,Xpath XML 爬蟲的定義 百度上詳細的介紹 三大步驟:

Elam的caffe筆記之配置篇(六):Centos6.5下編譯caffe及caffe的python3.6介面

Elam的caffe筆記之配置篇(六):Centos6.5下編譯caffe及caffe的python3.6介面 配置要求: 系統:centos6.5 目標:基於CUDA8.0+Opencv3.1+Cudnnv5.1+python3.6介面的caffe框架 綜合來說,caf

Elam的caffe筆記之配置篇:基於CentOS6.5 python3.6 CUDA8.0 cudnnv5.1 opencv3.1 下的caffe配置

Elam的caffe筆記之配置篇:基於CentOS6.5 python3.6 CUDA8.0 cudnnv5.1 opencv3.1 下的caffe配置 作為一個完完全全的linux小白,平時連cmd開啟資料夾都要百度的人,面對單獨配置caffe這個棘手任務,第一反應就是搜教程。

Python3.6.3官方文件閱讀筆記

Python3.6.4官方文件閱讀筆記 Python3.6.4官方文件閱讀筆記 一、基本格式說明 二、基礎語法以及相關操作模式 (一) 基本資料型別以及操作符

程式設計師的職業素養 讀書筆記 - 第6練習

程式設計柔道場 卡塔:程式設計卡塔是一整套敲擊鍵盤和滑鼠的動作,用來模擬程式設計問題的解決過程。 瓦薩:兩個人的卡塔。一個人負責攻,另一個人負責守。 自由練習:很像由兩個參與者解決問題的瓦薩,也可以有多人蔘與。 自身經驗的拓展 職業程式通常會受到一種限制,即所解決問題的各類比較單一。老闆通常只強調一

日常筆記-centos7安裝python3.6.6

centos7安裝python3.6.6以及報錯解決 下載包 cd 到/tmp目錄下 wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz 解壓 tar -xzvf Python-3.6.6.tgz -C /tmp

AI-030: Google機器學習教程(ML Crash Course with TensorFlow APIs)筆記6-7 - 練習TF實現線性迴歸、特徵組合及離群值分離

本文是Google機器學習教程(ML Crash Course with TensorFlow APIs)的學習筆記。教程地址: https://developers.google.com/machine-learning/crash-course/ml-intro 6. First Ste

python3.6.3+opencv3.3.0學習筆記七--人臉識別效果實錄

採用CV_FOURCC(‘D’, ‘I’, ‘V’, ‘X’) = MPEG-4 codec壓縮格式。 執行人臉識別並實時儲存記錄,效果如下: 2M限制條件下的GIF格式幾乎沒法看,但人

python3.6 字典 自動生成生成不同習題和答案不同的試卷 練習記錄

import random import time capitals = {'Alabama': 'Montgomery', 'Alaska': 'Juneau', 'Arizona': 'Phoenix', 'Arkansas':

小白的Python3.6學習筆記--tkinter一步步製作GUI讀取並實時顯示採集卡資料(二)

上次我最終做出了一個簡易的串列埠助手,其效果如下: 但在反覆執行多次之後,發現了很多小毛病,接下來一一列舉並改正: 1.在電腦未接入裝置的時候,程式執行會報錯無法執行:        問題

學習筆記十五--python3.6+pycharm2017.2.3+pyqt5的配置與使用

近期準備學習一下將python程式按照GUI格式以視窗形式示人,查閱網上諸多部落格,各部落格之間相互引用的現象驚人,天下文章一大抄本不是什麼稀奇的事,但坑人的是按照諸位大咖的說明幾乎沒有成功的,究其原因,因為我安裝的均為最新版本的軟體,大咖們的都是以前的版本,而