zoukankan      html  css  js  c++  java
  • Python学习笔记-Day30-socket套接字

    内容大纲

    一、C/S架构和B/S架构

    二、socket套接字及在python中的应用

    一、C/S架构和B/S架构

    B/S架构:Browser/Server,浏览器端和服务端架构,通过浏览器访问服务器,例如百度等。B/S是趋势,能够统一程序的入口,例如微信小程序

    C/S架构:Client/Server,客户端与服务器端架构,通过客户端访问服务器,例如qq客户端、微信客户端等,BS架构也是一种CS架构

    二、socket套接字

    1、什么是套接字?

    socket是应用层和TCP/IP协议族通信的中间软件抽象层,它是一组接口。

    站在我们的角度,socket就是一个模块,我们通过调用模块中的方法建立两个进程之间的链接和哦通信。

    也有人认为socket就是ip+port,ip用来标识互联网中主机的位置,port用来标识这台机器的应用程序的位置,所以我们只要确立了ip和port就能找到一个应用程序,并且使用socket模块与之通信。

    基于文件类型的套接字家族:AF_UNIX

    基于网络类型的套接字家族:AF_INET

     三、基于TCP协议的socket

    tcp是基于链接的,必须先启动服务器端,然后在客户端去链接服务器端

    server端的代码:

    import socket
    sk = socket.socket() # 实例化一个socket对象
    sk.bind(('127.0.0.1',8056))  # 把地址绑定到套接字
    sk.listen()  # 监听链接 ,括号里可加允许的阻塞数量,默认为无数,py3.4之前一定要加数量
    conn,addr = sk.accept()  # 接收客户端的链接,与客户端的connect组成三次握手
    conn.send('msg'.encode('utf-8'))  # 发送消息给客户端,消息必须是bytes类型
    msg = conn.recv(1024)  # 接收客户端的消息,括号里是允许接收的最大的字节数
    conn.close()  # 关闭与客户端的链接
    sk.close()  # 关闭服务器,通常不会关闭服务器

    client端的代码

    import socket
    sk = socket.socket()  # 实例化一个socket对象
    sk.connect(('127.0.0.1',8056))  # 尝试链接服务器
    sk.send('msg'.encode('utf-8'))  # 发送消息
    msg = sk.recv(1024)  # 接收消息
    print(msg.decode('utf-8'))
    sk.close()  # 关闭客户端的套接字

    四、基于UDP的socket

    udp是无链接的,启动服务器之后可以直接接收消息,不需要提前建立链接

    server端的代码:

    import socket
    udp_sk = socket.socket(type=socket.SOCK_DGRAM)
    udp_sk.bind(('127.0.0.1',9000))  # 绑定服务器套接字
    msg,addr = udp_sk.recvfrom(1024)  # 接收客户端的消息和地址
    udp_sk.sendto('msg'.encode('utf-8'),addr)  # 发送消息给客户端
    udp_sk.close()  # 关闭服务器套接字

    client端的代码:

    import socket
    udp_sk = socket.socket(type=socket.SOCK_DGRAM)  # 实例化一个对象
    udp_sk.sendto('hello'.encode('utf-8'),('127.0.0.1',9000))  # 发送消息
    msg,addr = udp_sk.recvfrom(1024)  # 接收消息
    udp_sk.close() # 关闭
  • 相关阅读:
    一道百度2014校招笔试题
    leetcode_question_119 Pascal's Triangle II
    STL 查找vector容器中的指定对象:find()与find_if()算法
    QT类的继承结构
    poj 3254 Corn Fields (状态压缩DP)
    从vector容器中查找一个子串:search()算法
    linux 提示符绝对路径
    ssh加密公私钥
    yum-plugin-priroites这个插件的一个文件。
    什么是EPEL 及 Centos上安装EPEL
  • 原文地址:https://www.cnblogs.com/tian-tian/p/9641355.html
Copyright © 2011-2022 走看看