通過Python3實現TCP程式設計

2021-08-19 21:06:24 字數 1922 閱讀 2515

偽**:

ss = socket() #建立伺服器套接字

ss.bind() #把位址繫結到套接字上

ss.listen() #監聽連線(最大連線數)

info_loop: #伺服器無限迴圈

cs = ss.accept() #接受客戶端連線

comm_loop: #通訊迴圈

cs.recv()/cs.send() #對話(接收/傳送)

cs.close() #關閉客戶端套接字

ss.close() #關閉伺服器

所有的套接字都用socket.socket()函式來建立,伺服器需要「坐在某個埠上「等待請求」所以它們必須要「繫結」到乙個本地位址上,

由於tcp是乙個面向連線的通訊系統,在tcp伺服器開始工作之前,要先完成一些設定,tcp伺服器必須「監聽」連線,設定完成之後伺服器

就可以進入無限迴圈了。

乙個簡單的「單執行緒」伺服器會呼叫accept()函式等待連線的到來,預設情況下accept()函式是阻塞的,即程式在連線到來之前會處於掛起狀態,

套接字也支援非阻塞模式。

一旦接收到乙個連線,accept()函式就會返回乙個單獨的客戶端套接字用於後續的通訊。

簡單的tcp伺服器

**如下

#

!/usr/bin/env python3

#-*- coding:utf-8 -*-

from socket import *

from time import

ctime

host = ''

port = 12345buffsize = 2048addr =(host,port)

tctime =socket(af_inet,sock_stream)

tctime.bind(addr)

tctime.listen(3)

while

true:

print('

wait for connection ...')

tctimeclient,addr =tctime.accept()

print("

connection from :

",addr)

while

true:

data =tctimeclient.recv(buffsize).decode()

ifnot

data:

break

tctimeclient.send((

'[%s] %s

' %(ctime(),data)).encode())

tctimeclient.close()

tctimeclient.close()

tcp客戶端**:

#

!/usr/bin/env python3

#-*- coding:utf-8 -*-

from socket import *host ='

localhost

'port = 12345buffsize=2048addr =(host,port)

tctimeclient =socket(af_inet,sock_stream)

tctimeclient.connect(addr)

while

true:

data = input("

>")

ifnot

data:

break

tctimeclient.send(data.encode())

data =tctimeclient.recv(buffsize).decode()

ifnot

data:

break

print

(data)

tctimeclient.close()

python3漢字編碼 Python3的編碼總結

python3編碼結論 python3的字串在記憶體中是用unicode 佔空間和頻寬 儲存的,所以不能直接用於儲存,傳輸。要通過其它編碼轉換成相對應的位元組碼 str encode byte byte decode str 常見的編碼 編碼是美國最先發明的,最先出來的是ascii編碼,最早計算機在...

如何通過Python3和ssl實現加密通訊功能

一 說明 1.python標準庫ssl可實現加密通訊 2.ssl庫底層使用openssl,做了面向對像化改造和簡化,但還是可以明顯看出openssl的痕跡 3.本文先給出python實現的socket通訊,在此基礎上再給出ssl通訊以便讀者更方便地看到socket和ssl在python程式設計中的區...

python3實現CryptoJS AES加密演算法

from crypto.cipher import aes from binascii import b2a hex,a2b hex import base64 class aescrypt def init self,key self.key key.encode utf8 self.mode a...