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()