1.TCP客户端信息传递
思路
1.创建客户端套接字对象(买电话)
2.和服务端套接字建立连接(打电话)
3.发送数据(说话)
4.接收数据(接听)
5.关闭客户端套接字(挂电话)
实现步骤
1.导入所需模块:导入socket
模块来处理网络通信
2.创建TCP套接字:使用socket.socket()
函数创建一个TCP套接字
3.连接到服务器:使用connect()
方法连接到服务器的IP地址和端口号
4.发送数据:使用send()
方法将数据发送到服务器
5.接收服务器的响应:使用recv()
方法从服务器接收数据
6.关闭连接:使用close()
方法关闭客户端套接字
实现代码
import socket # 套接字模块
if __name__ == '__main__':
# 1.创建客户端套接字对象(买电话)
# socket.AF_INET---IPv4 协议族---10进制点分格式
# socket.AF_INET6---IPv6 协议族---16进制点分格式
# socket.SOCK_STREAM---TCP协议---精准数据传输
# socket.SOCK_DGRAM---UDP协议---不精准数据传输
tcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.和服务端套接字建立连接(打电话)
# connect((服务端IP地址,端口号))
tcp_client.connect(('192.168.10.64', 8080))
# 3.发送数据(说话)
# send("发送的数据".编码格式(将字符串转换为二进制))
# encode 编码 将字符串转化为字节码
# decode 解码将字节码转化为字符串
tcp_client.send("哎呦,你干嘛!".encode('GBK'))
# 4.接收数据(接听)
while True:
recv_data = tcp_client.recv(1024).decode("GBK")
if recv_data:
print(f"接受的数据为:{recv_data}")
else:
break
# 5.关闭客户端套接字(挂电话)
tcp_client.close()
2.TCP服务端信息传递
实现步骤
1.创建一个套接字(socket)
2.绑定到一个指定的IP地址和端口(bind)
3.开始监听连接请求(listen)
4.接受来自客户端的连接请求(accept)
5.处理客户端发送的数据(recv),并可以选择回复数据(send)
6.关闭连接(close)
实现代码
import socket # 套接字模块
if __name__ == '__main__':
# 1.创建服务端套接字对象
tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 端口复用
tcp_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
# 2.绑定IP地址和端口号
tcp_server.bind(('127.0.0.1', 8085))
# 3.设置监听,监听客户端的连接数量,默认最大的128个(同时)
tcp_server.listen(128)
# 4.等待接收客户端的连接请求
client = tcp_server.accept()
while True:
conn_socket, ip_port = client
print(f"客户端发送过来的套接字对象{conn_socket}")
print(f"客户端发送过来的IP地址和端口号{ip_port}")
# 5.接收数据
data = conn_socket.recv(2024)
print(f"接受的数据:{data.decode('GBK')}")
# 6.发送数据
conn_socket.send(input("服务端回复:").encode('GBK'))
# 7.关闭套接字
if not data:
break
conn_socket.close()
tcp_server.close()
3.TCP服务端与多客户端信息传递
实现步骤
1.服务器需要监听客户端连接请求,并接受这些连接。
2.使用多线程来处理多个客户端的连接。每当一个新的客户端连接到服务器时,创建一个新的线程来专门处理该客户端的通信
3.每个客户端连接后,服务端可以接收和发送数据
4.服务端需要有逻辑来处理不同客户端发送的信息,如广播信息给所有客户端,或实现某种业务逻辑
5.客户端通过TCP连接到服务器,并在连接建立后可以进行数据的发送和接收
6.客户端应处理来自服务端的数据,并根据协议进行相应的操作
实现代码
import socket # 套接字模块
import threading
def dialogue(new_socket, ip_port):
while True:
# 5.接收数据
data = new_socket.recv(2024)
print(f"接受的数据:{data.decode('GBK')}")
# 6.发送数据
new_socket.send(input("服务端回复:").encode('GBK'))
# 7.关闭套接字
new_socket.close()
def start_server():
# 1.创建服务端套接字对象
tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 端口复用
tcp_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
# 2.绑定IP地址和端口号
tcp_server.bind(('127.0.0.1', 8085))
# 3.设置监听,监听客户端的连接数量,默认最大的128个(同时)
tcp_server.listen(128)
# 4.等待接收客户端的连接请求
while True:
new_socket, ip_port = tcp_server.accept()
# 创建多任务线程对象
client_thread = threading.Thread(target=dialogue, args=(new_socket, ip_port))
print(f"当前客户端的IP地址和端口号{ip_port}")
client_thread.start()
# dialogue(new_socket, ip_port)
tcp_server.close()
if __name__ == '__main__':
start_server()