网络程序分为客户端程序服务端程序

客户端程序就是在用户设备上运行的程序

服务端程序就是在服务器端运行的程序

客户端程序开发:  

客户端的开发核心共有五步

  1. 创建套接字对象
  2. 链接服务器端
  3. 向服务器发送数据(请求)
  4. 接收服务器端数据
  5. 关闭套接字对象

以上步骤在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()
使用网络调试助手进行调试, 程序是可以正常发送接受信息 

服务器端程序开发:

 服务器端开发可以分为七步走:

  1. 创建套接字对象
  2. 绑定ip和端口号
  3. 设置监听, 等待客户端链接
  4. 链接客户端
  5. 接受客户端请求
  6. 处理请求, 并且响应客户端
  7. 关闭套接字对象
# 导包
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()
使用网络调试助手进行调试, 程序是可以正常发送接受信息 

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部