网络程序分为客户端程序和服务端程序
客户端程序就是在用户设备上运行的程序
服务端程序就是在服务器端运行的程序
客户端程序开发:
客户端的开发核心共有五步
- 创建套接字对象
- 链接服务器端
- 向服务器发送数据(请求)
- 接收服务器端数据
- 关闭套接字对象
以上步骤在socket包内都有相应的函数, 我们只要了解如何使用这些函数就行
# 创建socket类对象 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)在实例化套接字对象中传入了两个参数 socket.AF_INET, socket.SOCK_STREAM
AF_INET: IP地址类型, 表示使用IPv4的IP地址
SOCK_STREAM: 传输协议类型, 表示使用tcp协议
# 链接服务器 # connect方法参数为元组(ip地址, 端口号) tcp_socket.connect(('192.168.120.172',8000))connect传入一个元组作为参数 (ip地址, 端口号)
# 发送数据 tcp_socket.send('hello 你好'.encode(encoding='utf-8'))注意: 网络间的通信使用字节流, 因此需要将要发送的内容转为字节流
使用 encode(encoding = 'utf-8')
# 接受数据 reve = tcp_socket.recv(1024).decode(encoding='utf-8')recv()传入参数1024, 表示接收1024字节的数据
同理, 你接收到数据也是字节流, 使用decode方法将字节流转为看得懂的内容
# 关闭链接 tcp_socket.close()最后关闭socket套接字对象
# 导包
import socket
# 创建socket类对象
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 创立链接
# connect方法参数为元组(ip地址, 端口号)
tcp_socket.connect(('192.168.120.172',8000))
# 发送数据
tcp_socket.send('hello 你好'.encode(encoding='utf-8'))
# 接受数据
reve = tcp_socket.recv(1024).decode(encoding='utf-8')
print(reve)
# 关闭链接
tcp_socket.close()
服务器端程序开发:
服务器端开发可以分为七步走:
- 创建套接字对象
- 绑定ip和端口号
- 设置监听, 等待客户端链接
- 链接客户端
- 接受客户端请求
- 处理请求, 并且响应客户端
- 关闭套接字对象
# 导包 import socket # 实例化tcp服务器对象 tcp_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)# 设置端口复用, 如果程序停止, 立即释放端口 tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)这个步骤与客户端不同在于设置的端口复用
当程序执行完毕后, 不一定会立刻释放端口
当短时间内多次执行, 就有可能出现端口被占用的情况, 设置端口复用, 可以避免这种情况
# 绑定IP地址和端口号 tcp_server.bind(('',8010))使用bind方法来绑定, 传入一个元组
元组的第一个元素一般不需要设置
第二个元素是端口号
# 设置监听 tcp_server.listen(128)参数是最大链接数, 如果链接的主机数超过128, 就需要排队等待
# 接受客户端请求 new_socket, ip_port = tcp_server.accept()accept方法会返回新的套接字对象和客户端的IP信息
之后使用这个新的套接字对象来接收和发送信息
# 处理请求并回应 recv_data = new_socket.recv(1024).decode('utf-8') print(f'{ip_port}发送过来的信息是{recv_data}') new_socket.send('信息已收到,over'.encode('utf-8')) # 关闭 new_socket.close() tcp_server.close()
# 导包
import socket
# 实例化tcp服务器对象
tcp_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 绑定IP地址和端口号
tcp_server.bind(('',8010))
# 设置监听, 参数代表允许最大的连接数
tcp_server.listen(128)
# 接受客户端请求
new_socket, ip_port = tcp_server.accept()
# 处理请求并回应
recv_data = new_socket.recv(1024).decode('utf-8')
print(f'{ip_port}发送过来的信息是{recv_data}')
new_socket.send('信息已收到,over'.encode('utf-8'))
# 关闭
new_socket.close()
tcp_server.close()
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » TCP入门---基础网络程序开发
发表评论 取消回复