套接字接上連接循環

套接字接上連接循環

#加上鍊接循環的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'))
相關文章
相關標籤/搜索