python基礎知識的重新認識

2022-08-27 00:24:06 字數 1943 閱讀 9150

昨天模擬書本上client和server互動的例子,**明明是按照書上寫的,可是就是出現了錯誤,像下面這樣:
# tcpserver

from socket import *

from time import ctime

host =''

port = 6555

bufsiz = 2048

addr = (host,port)

tcpservsock = socket(af_inet,sock_stream)

tcpservsock.bind(addr)

tcpservsock.listen(5)

while true:

print('waiting for connection...')

tcpclisock,addr = tcpservsock.accept()

print('...connected from:',addr)

while true:

data = tcpclisock.recv(bufsiz)

if not data:

break

print(data.decode('utf8'))

tcpclisock.send('[%s]%s'%(bytes(ctime(),'utf8'),data)) # 這裡彈出錯誤

tcpclisock.close()

tcpservsock.close()

#tcpclient

from socket import *

host = 'localhost'

port = 6555

bufsiz = 2048

addr = (host,port)

tcpclisock = socket(af_inet,sock_stream)

tcpclisock.connect(addr)

while true:

data = input('> ')

if not data:

break

tcpclisock.send(data.encode())

data = tcpclisock.recv(bufsiz)

if not data:

break

print(data.decode('utf-8'))

tcpclisock.close()

然後錯誤就出現了:

waiting for connection...

...connected from: ('127.0.0.1', 3786)

hitraceback (most recent call last):

file "c:\users\yfg\desktop\server.py", line 26, in tcpclisock.send('[%s]%s'%(bytes(ctime(),'utf8'),data))

typeerror: a bytes-like object is required, not 'str'

在苦思冥想之後,我發現:在server.py line26中 ,我將二進位制資料放在了 字串格式化符後面,這是不對的,所以只要在原來  '[%s]%s'%(bytes(ctime(),'utf8'),data) 前面 加上 b ,就像這樣   b'[%s]%s'%(bytes(ctime(),'utf8'),data)  ,然後 跑起來 :在伺服器這邊得到這個 :

,在客戶端這邊得到這個:

問題就解決了 。 總結一下就是:字串格式化後跟字串,二進位制格式化要在字串格式前加字母b。

佇列的重新認識

今天又回顧了原來佇列那節,自己重新把 敲了一遍,但是還是犯了一些小小的錯誤,但是還是收穫了,對佇列有了近一步的認識。在此幾下僅僅為了更好的理解。錯誤分析 這個錯誤真的是犯得太幼稚了,而且還犯了兩次。在需要用到迴圈語句的地方,我這樣用 然後我列印了輸出佇列的長度 結果是 後來自己就把 重新檢驗了一遍發...

重構的重新認識

序言中,熊傑對重構的思考 認為存在的問題 1.認為掌握思想就夠了,不重重構手法 2.大刀闊斧的修改,甚者重建整個專案 重新認識 1.不要大刀闊斧 重構的基本定義 重構是在不改變軟體可觀察行為的前提下改善其內部結構。依靠的是那些已經被證明是行為保持的重構手法 整理出可測試的介面,給它新增測試,以此為重...

關於c 指標的重新認識

最近重新溫習了一下c 的指標,發現以前沒有理解的東西好像開始有點懂了 雖然指標這種東西挺煩人的,但是弄懂了總比沒懂要好 首先是指標的宣告 typename ptrname 要指向什麼樣的型別就宣告為什麼樣的型別,比如 int ptr ptr就是乙個指向int資料的指標,相信有的小夥伴對於 運算子兩邊...