socket 实现客户端与服务端通信
程序员文章站
2022-06-06 08:30:11
...
Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
Python内的Socket已经默认实现了TCP和UDP两种传输协议。
本文通过一个简单的例子记录一下socket的简单使用方法。
实现:客户端和服务端通过TCP协议通信,客户端向服务端发送消息,服务端接收消息后添加 “ too !” 字符串后返回给客户端,客户端可以主动断开连接。
服务端代码
import socket
import threading
# AF_INET表示ipv4地址类型, AF_INET6表示ipv6地址类型
# SOCK_STREAM: 表示传输协议类型是TCP,SOCK_DGRAM:表示传输协议类型是UDP
socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置是否复用,True表示复用
socket_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
hostname = socket.gethostname()
ip = socket.gethostbyname(hostname)
port = 9000
addr = (ip, port)
socket_server.bind(addr)
# 设置监听, 128: 表示最大等待的连接个数
socket_server.listen(128)
def handle_client(socket_client: socket.socket):
while True:
recv_data = socket_client.recv(1024)
if recv_data:
recv_content = recv_data.decode("utf-8")
print("接收客户端的数据为:", recv_content)
# 发送数据
socket_client.send((recv_content + " too !").encode("utf-8"))
else:
print("客户端下线了")
break
while True:
(socket_client, addr_client) = socket_server.accept()
sub_thread = threading.Thread(target=handle_client, args=(socket_client,))
# 设置守护主线程
sub_thread.setDaemon(True)
sub_thread.start()
客户端代码
import socket
import time
socket_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
hostname = socket.gethostname()
ip = socket.gethostbyname(hostname)
port = 9000
addr = (ip, port)
socket_client.connect(addr)
exit_list = ["byebye", "exit"]
while True:
msg = input("请输入:")
if msg in exit_list:
socket_client.close()
break
msg_data = msg.encode("utf-8")
socket_client.send(msg_data)
recv_data = socket_client.recv(1024)
recv_msg = recv_data.decode("utf-8")
print(recv_msg)
现在我们已经对socket有所了解了,然后让我们尝试使用socket去实现静态web服务器
https://blog.csdn.net/smlxs_lbb/article/details/104935553