Python中的网络编程

  • IP地址
    • IPv4
    • IPv6
    • 查看本机的IP地址
      • win ipconfig
      • linux ifconfig
    • ping命令
      • ping www.baidu.com 查看是否能连通指定的网站
      • ping 192.168.1.222 查看是否能连通指定的IP
  • Port端口
    • 0-65535
  • TCP/IP协议
    • 传输数据之前要建立连接,通过三次握手建立:
      • 客户端 --> 服务端 ,SYN 客户端告诉服务端我是谁
      • 服务端 --> 客户端 , ACK + SYN
        • 服务端告诉客户端我收到了你的SYN(ACK)
        • 服务端告诉客户端我是谁 (SYN)
      • 客户端 --> 服务端 ,ACK
        • 服务端告诉客户端我收到了你的SYN ,同时确认你收到了我的SYN(ACK)
    • 开始传输数据 报文+内容
      • 报文类似元数据,描述数据从哪来、到哪去,数据大小、数据类型等
      • 内容:byteString类型,即bytes

bytes和str类型的互相转换

a = '哈萨克斯坦@#$%^&*(abc'
# str -> bytes类型(byte String)
# 按照utf8的格式,将str转为byteString类型
a_bytes = a.encode() # 默认utf8
print(a_bytes)

# bytes类型 -> str
a = a_bytes.decode() # 默认utf8
print(a)

""" b'\xe5' 
bytes 字节类型字符串 只是为了方便网络通讯 16进制数字来表述符号
【b】 表示bytes
【\xe5】 表示后边两个字符是16进制数字
"""

# 按照gbk的格式,将str转为byteString类型
b_bytes = a.encode('gbk')
print(b_bytes)
b = b_bytes.decode('gbk') # bytes类型 -> str
print(b)

# bytes数据一定可以转换为字符串吗???
# 不一定(比如:图片、视频、音频等)
  • TCP服务端代码

跨服务器测试时:

  • 服务端代码和客户端代码必须在同一个网段之内!
  • 服务端绑定ip时,请使用 0.0.0.0;对应的客户端代码要连接的ip写服务端的IP
"""TCP 服务端"""
import socket

# ① 创建一个服务端socket套接字,负责接收客户端的请求(门迎)
# socket.AF_INET:使用IPV4的地址
# socket.SOCK_STREAM:使用TCP协议
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# ② 绑定服务端的ip地址和端口号
# ('ip地址', 端口号)
# server_socket.bind(('127.0.0.1', 8080))
server_socket.bind(('192.168.25.76', 8080))

# ③ 设置服务端进入监听状态
# 服务端同一时间支持多少个客户端向它发起连接请求
server_socket.listen(128)

# ④ 服务端等待客户端进行连接
print('服务端等待接收客户端的请求...')

# 没有客户端来连接服务端时,accept方法会阻塞等到,直到有客户端来连接,accept才会返回
# service_client_socket:也是一个 socket 对象,负责和对应的客户端进行通信(服务员)
# ip_port:是一个元祖,包含的是客户端的ip和port
service_client_socket, ip_port = server_socket.accept()
print(f'服务端来自{ip_port}客户端的连接...')


# ⑤ 服务端接收客户端发送的数据
# 如果客户端没有给服务端发送消息,recv也会阻塞等待
recv_msg = service_client_socket.recv(1024) # bytes
print(f'接收到来自客户端的消息:{recv_msg.decode()}')

# ⑥ 服务端给客户端回应数据
send_msg = input('请输入给客户端回应的消息:') # str
service_client_socket.send(send_msg.encode())

# ⑦ 关闭服务端的 socket
service_client_socket.close()
server_socket.close()
  • TCP客户端代码
"""TCP客户端"""
import socket

# ① 创建一个客户端的 socket 套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# ② 通过客户端 socket 连接服务端
client_socket.connect(('192.168.25.76', 8080))

# ③ 发送消息给服务端
send_msg = input('请输入发送给服务端的消息:')
client_socket.send(send_msg.encode())

# ④ 接收服务端回应的消息
recv_msg = client_socket.recv(1024) # bytes
print(f'接收到来自服务端的消息:{recv_msg.decode()}')

# ⑤ 关闭客户端 socket
client_socket.close()

你可能感兴趣的:(网络,python,服务器)