zoukankan      html  css  js  c++  java
  • Socket 基础/进阶-1

    C/S 架构

      浏览器是客户端,淘宝网页是服务端

      C/S架构与socket的关系:

        完成C/S架构的开发

      

    osi七层

      一个完整的计算机系统是由硬件、操作系统、应用软件三者组成   ,  互联网的核心就是由一堆协议组成,协议就是标准,比如全世界人通信的标准是英语 , 类似于国际通用的英语。

      C/S架构的软件(软件属于应用层)是基于网络进行通信的  , 想开发一款基于网络通信的软件,就必须遵循这些标准。

      

      WHAT IS SOCKET ?

       Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

      所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。

                                          套接字流程:

      NB 的一张图:    

      

       

     1 服务端:
     2 from socket import *
     3 phone=socket(AF_INET,SOCK_STREAM)
     4 phone.bind(('127.0.0.1',8080))
     5 phone.listen(5)
     6 
     7 conn,addr=phone.accept()
     8 
     9 while 1:
    10     data=conn.recv(1024)
    11     print(data)
    12     conn.send(data.upper())
    13 conn.close()
    14 phone.close()
    15 
    16 客户端:
    17 from socket import *
    18 
    19 phone=socket(AF_INET,SOCK_STREAM)
    20 phone.connect(('127.0.0.1',8080))
    21 
    22 while 1:
    23     msg=input(': ').strip()
    24     phone.send(msg.encode('utf-8'))
    25     data=phone.recv(1024)
    26     print(data)
    27 
    28 说明卡的原因:缓冲区为空recv就卡住,重新启动
    29 
    30 
    31 服务端
    32 from socket import *
    33 phone=socket(AF_INET,SOCK_DGRAM)
    34 phone.bind(('127.0.0.1',8080))
    35 while 1:
    36     msg,addr=phone.recvfrom(1024)
    37     phone.sendto(msg.upper(),addr)
    38 客户端
    39 from socket import *
    40 phone=socket(AF_INET,SOCK_DGRAM)
    41 while True:
    42     msg=input(': ')
    43     phone.sendto(msg.encode('utf-8'),('127.0.0.1',8080))
    44     msg,addr=phone.recvfrom(1024)
    45     print(msg)
    View Code

    TCP的套接字

    注意:tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端

     tcp_server:

    1 ss = socket() #创建服务器套接字
    2 ss.bind()      #把地址绑定到套接字
    3 ss.listen()      #监听链接
    4 inf_loop:      #服务器无限循环
    5     cs = ss.accept() #接受客户端链接
    6     comm_loop:         #通讯循环
    7         cs.recv()/cs.send() #对话(接收与发送)
    8     cs.close()    #关闭客户端套接字
    9 ss.close()        #关闭服务器套接字(可选)
    View Code

     tcp_client:

    1 cs = socket()    # 创建客户套接字
    2 cs.connect()    # 尝试连接服务器
    3 comm_loop:        # 通讯循环
    4     cs.send()/cs.recv()    # 对话(发送/接收)
    5 cs.close() 
    View Code

    UDP的套接字

    注意:udp是无链接的,先启动哪一端都不会报错

    udp_server

    1 ss = socket()   #创建一个服务器的套接字
    2 ss.bind()       #绑定服务器套接字
    3 inf_loop:       #服务器无限循环
    4      cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送)
    5 ss.close()                         # 关闭服务器套接字
    View Code

    udp_client

    1 cs = socket()   # 创建客户套接字
    2 comm_loop:      # 通讯循环
    3     cs.sendto()/cs.recvfrom()   # 对话(发送/接收)
    4 cs.close()                      # 关闭客户套接字
    View Code

    注意:udp 服务端可以跟多个客户端沟通!

  • 相关阅读:
    WingIIDE的licese破解方法
    HttpCookie
    Jquery中html()方法 and "click"绑定后代元素
    jquery 选择器多个
    input标签的type为select、radio、checkbox的使用
    c#中?和??使用
    VS中使用附加进程来调试项目
    刷新局部页面
    ant design vue 文件上传的集中页面
    vue 上传超大文件出现Uncaught (in promise) Error: Network Error at createError
  • 原文地址:https://www.cnblogs.com/MR-allen/p/10467708.html
Copyright © 2011-2022 走看看