# socket
"""
1、Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
2、server端:服务端,监听指定端口,提供服务
3、client端:客户端,连接服务端,获取服务
"""
服务端
# 引用模块
import socket
# 初始化(实例化)socket对象sk
sk = socket.socket()
# 定义绑定的IP端口,元组格式
address = ('127.0.0.1', 8088)
# 绑定IP端口
sk.bind(address)
# 设置最大连接数
sk.listen(5)
# 初始化连接,conn获取通道,addr获取远端地址,进入等待
"""
1、初始化连接后会进入阻塞状态,等待连接
2、客户端连接后可以通过通道进行信息收发
"""
# 打印通道和远端地址信息
conn, addr = sk.accept()
print(conn)
print(addr)
# 信息收发
"""
1、服务端和客户端谁先发信息都可以
2、必须是一发一收,两端不能同时发消息或收消息
"""
# 接收信息
"""
1、接收可以指定一次最大接收多少字节
2、接收的信息为bytes类型
3、等待接收时,进入阻塞状态,直到信息发送过来
4、一次接收信息有大小限制,也就是说有可能一次无法全部接收,需要分多次
5、客户端接收信息使用socket对象sk,服务器端使用通道conn
"""
info = str(conn.recv(1024), encoding='utf8')
print(info)
# 发送消息
"""
1、发送信息必须是bytes类型
2、send:发送TCP数据,将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小(就是有可能发送不完整)。
3、sendall:完整发送TCP数据,完整发送TCP数据。将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。
4、客户端发送信息使用socket对象sk,服务器端使用通道conn
"""
conn.sendall(bytes('hello too', encoding='utf8'))
# 关闭连接
# 客户端关闭使用socket对象sk,服务器端使用通道conn
conn.close()
客户端
# 引入模块
import socket
# 初始化(实例化)socket对象sk
sk = socket.socket()
# 定义服务器端IP端口,元组格式
address = ('127.0.0.1', 8088)
# 连接服务器
sk.connect(address)
# 信息收发
"""
1、服务端和客户端谁先发信息都可以
2、必须是一发一收,两端不能同时发消息或收消息
"""
# 发送消息
"""
1、发送信息必须是bytes类型
2、send:发送TCP数据,将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小(就是有可能发送不完整)。
3、sendall:完整发送TCP数据,完整发送TCP数据。将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。
4、客户端发送信息使用socket对象sk,服务器端使用通道conn
"""
sk.sendall(bytes('hello', encoding='utf8'))
# 接收信息
"""
1、接收可以指定一次最大接收多少字节
2、接收的信息为bytes类型
3、等待接收时,进入阻塞状态,直到信息发送过来
4、一次接收信息有大小限制,也就是说有可能一次无法全部接收,需要分多次
5、客户端接收信息使用socket对象sk,服务器端使用通道conn
"""
info = str(sk.recv(1024), encoding='utf8')
print(info)
# 关闭连接
# 客户端关闭使用socket对象sk,服务器端使用通道conn
sk.close()