TCP程序流程及服务器客户端
?
Tcp服務器創建:
import socket
?
# 服務器的端口號
PORT = 9000
?
# 創建套接字socket對象,用于進行通訊
# scoket.SOCK_STREAM 表明使用tcp協議,流式協議
# 監聽socket
server_sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
?
# 為服務器的socket綁定一個固定的地址,ip和端口,元祖
address = ("", PORT)
server_sock.bind(address)
?
# 讓服務器開啟監聽,可以收到客戶端的連接請求
#listen參數表示監聽隊列的大小,最多能同時處理三次握手的客戶端數量
server_sock.listen(128)
?
# 接受客戶端的連接請求,與客戶端完成三次握手
# accept函數是阻塞,如果當前沒有客戶端發起連接,則會阻塞等待直到有客戶端發起連接
# new_sock是一個新的socket對象,用來跟這個連接的客戶端進行一對一數據傳輸使用
# client_addr是建立連接的客戶端的地址,ip和端口? 元祖
new_sock, client_addr = server_sock.accept()
?
# print("客戶端 %s 已經建立了連接"% str(client_addr))
print("客戶端 %s 已經建立了連接" % (client_addr,))
?
# 接收客戶端的數據
recv_data = new_sock.recv(1024)
?
print("接收到了客戶端 %s 傳來的數據: %s" % (client_addr, recv_data.decode()))
?
# 向客戶端發送數據
?
msg = input("請輸入要傳給客戶端的數據:")
?
new_sock.send(msg.encode())
?
# 如果沒有數據再傳給客戶端,可以關閉連接
new_sock.close()
?
# 如果不想再接收新的客戶端的連接請求,可以關閉server_sock
server_sock.close()
測試:
我們暫時還沒有寫tcp客戶端,可以用nc命令來作為客戶端進行測試。
# nc 服務器的IP 服務器的端口
nc 127.0.0.1 8000
?
TCP客戶端創建:
import socket
?
# 創建socket對象,用于通信
client_sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
?
# 對于客戶端,可以不用綁定一個固定地址,使用操作系統分配的即可
?
# 向服務器發起連接請求, 并完成三次握手
server_addr = ("127.0.0.1", 9000)
client_sock.connect(server_addr)
?
# 向服務器發送數據
msg = input("請輸入要發送的數據:")
client_sock.send(msg.encode())
?
# 接收服務器傳回來的數據
recv_data = client_sock.recv(1024)
print("收到了由服務器傳回的數據:%s" % recv_data.decode())
?
# 如果客戶端不想再次發送數據,可以關閉連接
client_sock.close()
?
測試:
可以用我們剛才寫的服務器程序,也可用nc命令進行測試
# -l參數表示服務器監聽
# nc -l 綁定的服務器ip 端口
nc -l 127.0.0.1 8000
總結
以上是生活随笔為你收集整理的TCP程序流程及服务器客户端的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 直方图均衡 视觉显著_视觉图像:对比度受
- 下一篇: java implements t_Ja