server主要的步驟:
1、創建套接字-->2、綁定服務器的信息—>3、默認的套接字由主動變為被動 listen-->4、等待客戶端的鏈接
# 如果recv解堵塞,那么有2種方式:
# 1. 客戶端發送過來數據
# 2. 客戶端調用close導致而了 這里 recv解堵塞
def main(): # 1. 買個手機(創建套接字 socket) tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2. 插入手機卡(綁定本地信息 bind) tcp_server_socket.bind(("", 7890)) # 3. 將手機設置為正常的 響鈴模式(讓默認的套接字由主動變為被動 listen) tcp_server_socket.listen(128) # 循環目的:調用多次accept,從而為多個客戶端服務 while True: print("等待一個新的客戶端的到來...") # 4. 等待別人的電話到來(等待客戶端的鏈接 accept) new_client_socket, client_addr = tcp_server_socket.accept() print("一個新的客戶端已經到來%s" % str(client_addr)) # 循環目的: 為同一個客戶端 服務多次 while True: # 接收客戶端發送過來的請求 recv_data = new_client_socket.recv(1024) print("客戶端福送過來的請求是:%s" % recv_data.decode("utf-8")) # 如果recv解堵塞,那么有2種方式: # 1. 客戶端發送過來數據 # 2. 客戶端調用close導致而了 這里 recv解堵塞 if recv_data: # 回送一部分數據給客戶端 new_client_socket.send("hahahghai-----ok-----".encode("utf-8")) else: break # 關閉套接字 # 關閉accept返回的套接字 意味着 不會在為這個客戶端服務 new_client_socket.close() print("已經為這個客戶端服務完畢。。。。") # 如果將監聽套接字 關閉了,那么會導致 不能再次等待新客戶端的到來,即xxxx.accept就會失敗 tcp_server_socket.close()
client端
# 1. 創建tcp的套接字 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2. 鏈接服務器 server_ip = input("請輸入要鏈接的服務器的ip:") server_port = int(input("請輸入要鏈接的服務器的port:")) server_addr = (server_ip, server_port) tcp_socket.connect(server_addr) # 3. 發送數據/接收數據 send_data = input("請輸入要發送的數據:") tcp_socket.send(send_data.encode("utf-8")) # 4. 關閉套接字 tcp_socket.close()