No.011-Python-学习之路-Day8-Socket网络编程

Socket网络编程介绍

背景

两台电脑之间的通信是通过网络来传输的,传输的是bit流,实现通信是使用IP+端口,把网络删的相关传输进行封装,仅暴露一些接口,这些接口即socket;

so,对tcp及udp等网络协议的封装即socket;

socket只干两件事情<发数据send,收数据receive>

两台设备间通信

步骤一:首先两台设备需要import socket

步骤二:两台设备声明socket.TCP/IP相同协议类型,声明地址簇<Socket Families>及协议类型<Socket protocol types>

步骤三:后面步骤如下图

地址簇<Socket Families>

  • socket.AF_UNIX 本机进程间通信,也到本地的localaddress<127.0.0.1>转一下发送给另外进程
  • socket.AF_INET IPV4
  • socket.AF_INET6 ipv6

协议类型<Socket protocol Types>

  • socket.SOCK_STREAM # for tcp
  • socket.SOCK_DGRAM  # for udp
  • socket.SOCK_RDM # 是一种可靠的UDP形式,即保证交付数据报大拿不保证顺序;
  • socket.SOCK_RAW  原始套接字,普通的套接字无法处理ICMP及IGMP等网络报文,而SOCK_RAW;

注:SOCK_RAW也可以处理特殊的IPV4报文,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP地址头

 Socket编程实例

最简单的客户端及服务端通信的实现

# 导入socket模块
import socket 
# 声明socket类型,同时生成socket连接对象(括号内为地址簇及协议类型,默认即这两种)
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 与server地址(一个包含ip及端口的tuple)建立连接
client.connect(('localhost', 9988))
# 循环的收发数据
while True:
    msg = input(">>:")
    if msg.startswith("quit"): break
    # 发送数据
    # 注意无法send空,空server端认为你还在发,send也是有限制的
    # send是有个缓冲区的,如果一次没发完的全存在着,下次发,发的是缓冲的;
    # 这个缓冲区是有个大小的,如果缓冲区被占满,下次会扩充...<>
    # sendall 循环发send
    client.send(msg.encode(encoding='utf-8')) # 
    # 收取数据
    # 定义收多少数据,收可以很大,但也有限制,recv是有限制的,官方建议小于8192bit
    data = client.recv(1024) 
    print(data)
client.close()
简单客户端实现
简单服务端实现

服务端可以反复的和客户端进行通信<但一次只有一个>

import socket

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server.bind(('localhost', 6969))

server.listen(5)

f = open("E:\\shipin.flv", 'rb')
video = f.read()
print(len(video))
f.close()
# 通过循环的方式可以反复的建立链接
while True:
    conn, addr = server.accept()
    try:
        while True:
            # 通过循环的方式可以反复的收发消息
            data = conn.recv(1024)
            print(data)
            if not data:
                conn.close()
                break
            conn.sendall(video)
    except ConnectionResetError:
        continue

server.close()
服务端重复建链接

end

猜你喜欢

转载自www.cnblogs.com/FcBlogPythonLinux/p/12331181.html