day7-简单socket例子
简述
根据前面的伪代码,我们进行客户端和服务端代码的编写,看看如何来实现
socket实例
服务器端流程逻辑图
服务端代码
import socket #服务器端 server = socket.socket() #绑定要监听的IP地址和端口,以元组(host,port)的形式表示地址 server.bind(("localhost",6969)) #监听TCP传入连接 server.listen() print("我要接电话了") #conn就是客户端连过来而在服务器端为其生成的一个连接实例 conn,addr = server.accept() print(conn,addr) print("电话来了") #接收客户端发来的数据 data = conn.recv(1024) print("recv:",data) #发送数据到客户端 conn.send(data.upper()) #关闭服务器端 server.close() #运行输出 我要接电话了 <socket.socket fd=272, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 6969), raddr=('127.0.0.1', 49946)> ('127.0.0.1', 49946) 电话来了 recv: b'hello world'
客户端流程逻辑图
客户端代码
import socket #导入socket #客户端 #声明socket类型,同时生成socket连接对象(实例) client = socket.socket() #连接远程机器,一般address的格式为元组(hostname,port) client.connect(("localhost",6969)) #发送数据 client.send(b"hello world") #接收服务器端数据 data = client.recv(1024) print("recv:",data) #关闭连接 client.close() #运行输出 recv: b'HELLO WORLD'
注意
- 先启动服务端再运行客户端
- 客户端发起连接到服务端时,服务端接受连接并返回(conn,address),其中conn就是客户端连过来而在服务器端为其生成的一个连接实例,可以用来接收和发送数据,addr是连接客户端的地址。
- 在Python 3中发送的数据必须是字节bytes类型,否则报错,在Python 2中可以发送字符串或字节(bytes)!