Socket 通常被称之为套接字,已经成为Windows,mac等操作系统共同遵守的网络编程标准。可以用它通过网络来实现不同计算机之间的通信,也可以实现相同主机内的不同进程之间的通信。用socket进行网络开发需要了解服务器和客户端的socket原语。有如下原语:
socket():建立socket对象,参数通常包括使用的传输层协议类型,网络层地址类型等。
bind():进行绑定。在参数中要传入要绑定的IP地址和端口。
listen():监听。在服务端使用,用来告诉系统监听bind绑定的IP地址和端口,监听客户端来的连接。参数中可指定最大允许排队的连接数量。
connect():连接。在客户端使用,参数中需要指定服务器的地址和端口号。
accept():接收连接。在服务端使用,从监听到的连接队列中取出一个,包装成一个新的socket对象,用它和请求来的客户端进行通信。
send():发送数据。两端都可用,参数是要发送的数据,python3中支持bytes类型的数据。
recv():接收数据。两端均可使用,参数中可指定接收数据的大小。
close():关闭连接。
下面是具体的使用实例:客户端发送字符串,服务端将其转换成大写后返回给客户端。
服务端:
#导入socket模块
import socket #创建socket对象 server = socket.socket() #绑定地址和端口 server.bind(('localhost',6969)) #监听连接 server.listen(5) print("等待连接.....") #循环接受连接 while True: #接受连接,返回连个对象 conn,addr = server.accept() print("连接成功......") print(conn,addr) #循环接受收据 while True: data = conn.recv(1024) #将接受的数据解码成str类型进行输出 print("recv:",data.decode()) #将数据转换成大写发送给客户端 conn.send(data.upper()) #关闭连接 server.close()
客户端:
import socket client = socket.socket() #连接服务端 client.connect(('localhost',6969)) #循环发送数据 while True: #用户输入字符串 msg = input(">>:").strip() #发送数据 client.send(msg.encode()) #接受客户端发来的数据 data = client.recv(1024) #打印数据 print("recv:",data.decode()) #关闭连接
client.close()