python-- socket_tcp
socket 是服务端和客户端进行通信的,我们先来写一个服务端
服务端
import socket server = socket.socket() # 声明类型 server.bind(('localhost', 8888)) # 绑定ip地址和端口,是个元组 server.listen() # 开始监听 conn, addr = server.accept() # conn就是客户端连过来而在服务器端为其生成的一个连接实例,addr是他的地址在这里等数据发送过来 print(conn, addr) data = conn.recv(1024) # 接收数据 print('recv:', data) conn.send(data.upper()) # 将接收的数据变大写返回给 conn.close() server.close()
客户端
import socket client = socket.socket() # 声明协议类型,默认ipv4,http。同时生成socket连接对象 client.connect(('localhost', 8888)) # 连接服务器的ip 和端口,以元组的形式 client.send(b'hello world!') # 发数据,要以字节发送 data = client.recv(1024) # 接收数据 print('recv:', data) client.close()
这样服务端和客户端就都写好了,先来启动服务端,在来启动客户端,查看控制台
服务端打印的数据如下
<socket.socket fd=6, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8888), raddr=('127.0.0.1', 56520)> ('127.0.0.1', 56520) recv: b'hello world!'
客户端打印的数据如下
recv: b'HELLO WORLD!'
接受中文
服务端
import socket server = socket.socket() # 声明类型 server.bind(('localhost', 8888)) # 绑定ip地址和端口 server.listen() # 开始监听 conn, addr = server.accept() # conn就是客户端连过来而在服务器端为其生成的一个连接实例,addr是他的地址 data = conn.recv(1024) # 接收数据 print('recv:', data.decode()) conn.send(data.upper()) # 将接收的数据变大写返回给 server.close()
客户端
import socket client = socket.socket() # 声明协议类型,默认ipv4,http。同时生成socket连接对象 client.connect(('localhost', 8888)) # 绑定ip地址和端口,以元组的形式 client.send('我爱北京天安门'.encode('utf-8')) # 发数据有汉字加encode('utf-8') data = client.recv(1024) # 接收数据 print('recv:', data.decode()) client.close()
服务端打印的数据如下
recv: 我爱北京天安门
客户端打印的数据如下
recv: 我爱北京天安门
和客户端连续通信
服务端
import socket server = socket.socket() server.bind(('localhost', 8888)) server.listen() conn, addr = server.accept() # 放到while里面就卡住了, 因为和一个通完一句话之后,会等另一个连接 while True: data = conn.recv(1024) # 接收数据 if not data: # 判断接收的数据为空就断开 break print('recv:', data.decode()) conn.send(data.upper())
客户端
import socket client = socket.socket() client.connect(('localhost', 8888)) while True: msg = input('>>').strip() client.send(msg.encode('utf-8')) data = client.recv(1024) # 接收数据 print('recv:', data.decode())
方法二
服务端
import socket server = socket.socket() server.bind(('localhost', 6969)) # 绑定要监听端口 server.listen(5) # 监听 print("我要开始等电话了") while True: conn, addr = server.accept() # 等电话打进来 print("电话来了") while True: data = conn.recv(1024) print("recv:", data.decode()) if not data: # 客户端断开后返回上个while继续等 print("client has lost...") break conn.send(data.upper()) server.close()
客户端
import socket client = socket.socket() client.connect(('localhost', 6969)) while True: msg = input(">>:").strip() if len(msg) == 0: # 输入的为空 continue client.send(msg.encode("utf-8")) data = client.recv(10240) print("recv:", data.decode()) client.close()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)