昨天模擬書本上client和server互動的例子,**明明是按照書上寫的,可是就是出現了錯誤,像下面這樣:
# tcpserverfrom 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...在苦思冥想之後,我發現:在server.py line26中 ,我將二進位制資料放在了 字串格式化符後面,這是不對的,所以只要在原來 '[%s]%s'%(bytes(ctime(),'utf8'),data) 前面 加上 b ,就像這樣 b'[%s]%s'%(bytes(ctime(),'utf8'),data) ,然後 跑起來 :在伺服器這邊得到這個 :...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'
,在客戶端這邊得到這個:
問題就解決了 。 總結一下就是:字串格式化後跟字串,二進位制格式化要在字串格式前加字母b。
佇列的重新認識
今天又回顧了原來佇列那節,自己重新把 敲了一遍,但是還是犯了一些小小的錯誤,但是還是收穫了,對佇列有了近一步的認識。在此幾下僅僅為了更好的理解。錯誤分析 這個錯誤真的是犯得太幼稚了,而且還犯了兩次。在需要用到迴圈語句的地方,我這樣用 然後我列印了輸出佇列的長度 結果是 後來自己就把 重新檢驗了一遍發...
重構的重新認識
序言中,熊傑對重構的思考 認為存在的問題 1.認為掌握思想就夠了,不重重構手法 2.大刀闊斧的修改,甚者重建整個專案 重新認識 1.不要大刀闊斧 重構的基本定義 重構是在不改變軟體可觀察行為的前提下改善其內部結構。依靠的是那些已經被證明是行為保持的重構手法 整理出可測試的介面,給它新增測試,以此為重...
關於c 指標的重新認識
最近重新溫習了一下c 的指標,發現以前沒有理解的東西好像開始有點懂了 雖然指標這種東西挺煩人的,但是弄懂了總比沒懂要好 首先是指標的宣告 typename ptrname 要指向什麼樣的型別就宣告為什麼樣的型別,比如 int ptr ptr就是乙個指向int資料的指標,相信有的小夥伴對於 運算子兩邊...