套接字接上連接循環
#加上鍊接循環的server端
import socket
#生成一個socket對象
soc=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#綁定地址跟端口號
soc.bind(('127.0.0.1',8001))
#監聽(半鏈接池的大小),不是鏈接數
soc.listen(3)
#等着客戶端來鏈接,conn至關於鏈接通道,addr是客戶端的地址
while True:
print('等待客戶端鏈接')
conn,addr=soc.accept() #卡主,若是沒有客戶端鏈接,會一直卡在這,當有鏈接,才繼續往下走
print('有個客戶端鏈接上了',addr)
while True:
try:
#windows若是客戶端斷開,會報錯,加了try
#linux若是客戶端,斷開,不會報錯,會收到空,全部當data爲空時,也break
#等待接收,最大收取1024個字節
data=conn.recv(1024) #會卡主,當客戶端有數據過來,纔會執行
if len(data)==0: #處理linux客戶端斷開,若是在window下這段代碼根本不會執行(即使是客服端發了空,這個地方也不會走到)
break
print(data)
except Exception:
break
# 關閉通道
conn.close()
# 關閉套接字
soc.close()
#client通訊循環
import socket
soc=socket.socket()
soc.connect(('127.0.0.1',8001))
while True:
in_s=input('請輸入要發送的數據:')
#發送的數據必須是b格式,in_s.encode('utf-8') 把字符串編碼成b格式
#把b格式轉成字符串
# ss=str(b'hello',encoding='utf-8')
# ss=b'hello'.decode('utf-8')
# #把字符串轉成b格式
# by=bytes('hello',encoding='utf-8')
# by='hello'.encode('utf-8')
soc.send(in_s.encode('utf-8'))