目錄
1、tcp客戶端
2、tcp服務器
3、服務器多次連接客戶端、多次接收信息
1、tcp客戶端
"""
tcp:客戶端
1. 導入socket模塊
2. 創建socket套接字
3. 建立tcp連接(和服務端建立連接)
4. 開始發送數據(到服務端)
5. 關閉套接字
"""
import socket
# 創建socket套接字
tcp_client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 建立tcp連接
tcp_client_socket.connect(("127.0.0.1",7788))
# 發送數據
tcp_client_socket.send("客戶端發送數據成功".encode('utf-8'))
# 開始接收對方回復的數據
recv_data = tcp_client_socket.recv(1024)
print("接收到數據:",recv_data.decode('utf-8'))
# 關閉套接字
tcp_client_socket.close()
2、tcp服務器
"""
TCP服務端:
1. socket創建一個套接字
2. bind綁定ip和port
3. listen使套接字設置為被動模式
4. accept等待客戶端的鏈接
5. recv/send接收發送數據
"""
from socket import *# 創建socket
tcp_server_socket = socket(AF_INET,SOCK_STREAM)
# 服務IP和端口
address = ('',7788)
# 綁定服務器IP和端口
tcp_server_socket.bind(address)
# 使用socket創建的套接字默認的屬性是主動的,使用listen將其變為被動
# 參數128表示:允許同時排隊等待連接的最大連接數為128
tcp_server_socket.listen(128)
# 如果有c端鏈接服務器,產生一個新的套接字服務該c端口
# client_sock,ip_port接收tcp_server_socket參數后,tcp返回等待其他客戶端鏈接
client_socket,ip_port = tcp_server_socket.accept()
print("已連接客戶端:",ip_port)# 接收c端數據
recv_data = client_socket.recv(1024)
print("收到數據:%s"%recv_data.decode('utf-8'))# 發送數據給c端
client_socket.send("服務器端已收到信息".encode('utf-8'))# 關閉該客戶端套接字,如需服務需要重連
client_socket.close()
3、服務器多次連接客戶端、多次接收信息
"""
TCP服務端:
1. socket創建一個套接字
2. bind綁定ip和port
3. listen使套接字設置為被動模式
4. accept等待客戶端的鏈接
5. recv/send接收發送數據
"""
from socket import *tcp_server_socket = socket(AF_INET,SOCK_STREAM)tcp_server_socket.bind(('127.0.0.1',7788))
tcp_server_socket.listen(128)while True:new_client_socket,ip_port = tcp_server_socket.accept()print("已連接新客戶端:",ip_port)while True:recv_data = new_client_socket.recv(1024)if recv_data:print("收到數據:%s"%recv_data.decode('utf-8'))new_client_socket.send("服務器端已收到信息".encode('utf-8'))else:print("客戶端可能斷開連接")break# 關閉和當前客戶端的連接,當前客戶端不能在進行通信了new_client_socket.close()
# 關閉服務器(服務器不再接受新的客戶端連接),服務器不再接收新的客戶端連接(老的連接,繼續服務)
# tcp_server_socket.close()