一个简单的服务端与客户端TCP通信
服务端代码
from socket import *
ip_port = ("10.33.0.75", 8000) #定义创建连接的IP地址与IP端口
back_log = 5 #设置连接池为2
buffer_size = 1024 #设置每次发送与接收的数据大小
tcp_sever = socket(AF_INET, SOCK_STREAM) #给予socket.STREAM方式的通信就是基于流的方式进行通信,也就是tcp通信方式
tcp_sever.bind(ip_port) #建立连接端口
tcp_sever.listen(back_log) #listen中的back_log表示可以等待的访问数
while True: #当客户端端口之后,重复实现建立连接
print("服务起开始运行") #提示服务器运行
conn,addr = tcp_sever.accept() #conn表示等待的接收的端口号,addr表示等待接收的ip地址,等待客户端连接,也就是在在这里也就实现三次握手
print("双向链接是",conn)
print("客户端地址",addr)
while True: #实现循环接收与发送消息
try: #如果客户端异常退出,服务端将不至于发生错误而退出
data = conn.recv(buffer_size) #接收到客服端的数据赋值给data,buffer_size表示一次性接收数据的大小
print("客户端发来的消息是:", data.decode("utf-8"))
conn.send(data.upper()) #将接收客户端的数据返回给客户端
except Exception:
break;
conn.close() #关闭连接
tcp_sever.close() #关闭socket流
注意:socket编程在发送与接受数据的时候是以二进制形式传输的,所有发送与接收的时候需要对要发送的数据和接受的数据进行分别的编码和解码。
客户端代码
from socket import *
ip_port = ("10.33.0.75", 8000)
back_log = 5
buffer_size = 1024
tcp_client = socket(AF_INET, SOCK_STREAM) #创建用户
tcp_client.connect(ip_port) #建立连接
while True:
msg = input(">>:").strip() #读取用户输入的数据
if msg == "quit()": #如果用户输入的quit()将退出程序
break;
tcp_client.send(msg.encode("utf-8")) #向服务端发送消息
print("客户端发送消息")
data = tcp_client.recv(buffer_size) #等待并接收服务端返回的消息
print("接收到服务端发送的消息是:", data.decode("utf-8")) #打印服务端返回的消息内容
tcp_client.close() #关闭连接