Socket网络编程实例2
两个程序通过“网络”交互数据就使用socket,它只负责两件事:建立连接,传递数据。
所有的数据传输接收,必须都使用byte格式
1.简单实例:
#客户端 import socket client=socket.socket() client.connect(("localhost",6969)) client.send(b"Hello World") data_receive=client.recv(1024) print("接收到的数据是:",data_receive) client.close()
#服务器端 import socket server=socket.socket() server.bind(("localhost",6969)) server.listen() print("我要开始监听了") conn,port=server.accept() print("电话来了") data=conn.recv(1024) print("收到的数据是:",data) conn.send(data.upper()) print("返回的数据是:",data.upper()) server.close()
运行结果:客户端
接收到的数据是: b'HELLO WORLD'
运行结果:服务器端
我要开始监听了 电话来了 收到的数据是: b'Hello World' 返回的数据是: b'HELLO WORLD'
2.实例2传中文:
#客户端 import socket client=socket.socket() client.connect(("localhost",6969)) client.send("我要开始下载电影了a".encode("utf-8")) data_receive=client.recv(1024) print("接收到的数据是:",data_receive.decode("utf-8")) client.close()
#服务器端 import socket server=socket.socket() server.bind(("localhost",6969)) server.listen() print("我要开始监听了") conn,port=server.accept() print("电话来了") data=conn.recv(1024) print("收到的数据是:",data.decode("utf-8")) conn.send(data.upper()) server.close()
1 我要开始监听了 2 电话来了 3 收到的数据是: 我要开始下载电影了a
接收到的数据是: 我要开始下载电影了A
3.实例-与一个客户端不停地通话,用到 while循环:
#客户端(发出去的内容是小写的,收到的回应是大写的。) import socket client=socket.socket() #声明socket类型,同时生成socket连接对象;定义地址簇和协议类型(默认IPV4和TCP/IP) client.connect(("localhost",6969)) #连接本机的6969端口 while True: msg=input("请输入你的请求信息>>:") client.send(msg.encode("utf-8")) data=client.recv(1024) #1024个字节,接受服务器端的返回,recv默认是阻塞的。客户端一断开,conn.recv收到的就都是空数据。会陷入死循环。 print("recv:",data.decode()) client.close()
#服务器端 import socket server=socket.socket() server.bind(('localhost',6969)) #绑定要监听的端口 server.listen() #监听 print("我要开始等电话了") conn,addr=server.accept() print(conn,addr) #就是客户端连过来而在服务器端为其生成的一个连接实例。 print("电话来了") while True: data=conn.recv(1024) print("recv:",data) #conn.send("我是服务器端来的确认信息".encode("utf-8")) conn.send(data.upper()) server.close()
请输入你的请求信息>>:1 recv: 1 请输入你的请求信息>>:2 recv: 2 请输入你的请求信息>>:3 recv: 3 请输入你的请求信息>>:4 recv: 4 请输入你的请求信息>>:
我要开始等电话了 <socket.socket fd=288, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 6969), raddr=('127.0.0.1', 49602)> ('127.0.0.1', 49602) 电话来了 recv: b'1' recv: b'2' recv: b'3' recv: b'4'
4.实例-一个客户通话结束后,第二个客户接进来:
#客户端(发出去的内容是小写的,收到的回应是大写的。) import socket client=socket.socket() #声明socket类型,同时生成socket连接对象;定义地址簇和协议类型(默认IPV4和TCP/IP) client.connect(("localhost",6969)) #连接本机的6969端口 while True: msg=input("请输入你的请求信息>>:").strip() if len(msg)==0: continue client.send(msg.encode("utf-8")) data=client.recv(1024) #1024个字节,接受服务器端的返回 print("recv:",data.decode()) client.close()
#服务器端 import socket server=socket.socket() server.bind(('localhost',6969)) #绑定要监听的端口 server.listen() #监听 print("我要开始等电话了") while True: conn,addr=server.accept() print(conn,addr) #就是客户端连过来而在服务器端为其生成的一个连接实例。 print("电话来了") while True: data=conn.recv(1024) print("recv:",data) conn.send("我是服务器端来的确认信息".encode("utf-8")) if not data: print("Client has lost...") break conn.send(data.upper()) server.close()