网络-socket

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。socket套接字就像我们说话用某种语言一样,在网络上的各台计算机之间也有一种语言,这就是网络协议,不同的计算机之间必须使用相同的网络协议才能进行通信。

  • 网络协议:一套规则

  • 网络模型:

    • 七层模型 -七层

      1. 物理层
        能看见的东西

      2. 数据链路层
        接线传信号

      3. 网络层
        负责网络

      4. 传输层
        该层是两台计算机经过网络进行数据通信时,第一个端到端的层次,具有缓冲作用

      5. 会话层
        负责发送东西前向目标服务器发送数据包

      6. 表示层
        负责把东西表达出来

      7. 应用层
        应用层需要完成数据的管理和数据的处理

    • 四层模型 - 实际应用

      1. 链路层
        向该层用户提供透明的和可靠的数据传送基本服务
      2. 网络层
        负责网络
      3. 传输层
        该层是两台计算机经过网络进行数据通信时,第一个端到端的层次,具有缓冲作用
      4. 应用层
        应用层需要完成数据的管理和数据的处理

每一层都有相应的协议负责交换信息或者协同工作

  • TCP/IP 协议族

  • ip 地址:负责网络上唯一定位一个机器

    • ip 地址分5类

    • 是由四个数字段组成,每个数字段的取值是0-255

    • Ipv4 Ipv6

  • 端口

    • 范围 0-65535

    • 知名端口:0-1023

    • 非知名端口 :1024-65535

  • TCP/UDP协议

    • UDP 非安全的不面向连接的传输(非安全的不面向连接的传输,没有顺序,大小限制64kb(优点速度快))

    • TCP 基于连接的通信(慢(优点:安全))

  • socket 编程

    • socket (套接字):是一个网络通信的端点,能实现不同主机的进程通信

    • 通过IP + 端口定位对方并发送信息

    -UDP (及时通信用到)

    -TCP(慢-安全)

1. UDP通信

UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。
  • 使用UDP套接字发送数据
# 导入socket 模块
import socket

#  协议组(AF_INET IPV4) UDP通信SOCK_DGRAM
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

# 发送的数据必须以2进制  接收的地址以元祖方式 IP用字符串 端口用数字
udp_socket = sendto("发送的数据".encode("utf-8"),("127.0.0.1":8063)) 

# 关闭套接字
udp_socket.close()
  • 使用UDP套接字接收数据
 
 import socket
# 创建UDP通信
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

while True:
	# 绑定IP和端口
    udp_socket.bind(("127.0.0.1",7788))
	# 接收发送的数据  类型为元祖("内容",("ip",端口))
    recv_data = udp_socket.recvfrom(1024)
    print("发送的数据是 : %s" % recv_data[0].decode("utf-8"))
    print("发送的地址是 : %s" % str(recv_data[1]))

# 关闭套接字
udp_socket.close()

2. TCP通信

TCP 传输控制协议 是一种面向链接的,可靠,基于传输层通信协议,由IETF的RFC 793 定义
  • 使用TCP套接字发送数据
import socket

# 创建TCP链接
tcp_client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 链接服务器
tcp_client_socket.connect(("127.0.0.1",6689))

# 发送的数据
tcp_client_socket.send("数据".encode("utf-8"))

# 关闭套接字
tcp_client_socket.close()
  • 使用TCP套接字接收数据
import socket

# 创建TCP链接
tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 绑定IP和端口
tcp_server_socket.bind(("",7890))

# 监听
tcp_server_socket.listen(128)

# 获取数据 一个新的套接字 , 一个为IP和端口
tcp_center_socket,addr = tcp_server_socket.accept()

# 回送数据
tcp_center_socket.send("接收到数据".encode("utf-8"))

tcp_server_socket.close()

猜你喜欢

转载自blog.csdn.net/IF_Albert/article/details/88392223