zoukankan      html  css  js  c++  java
  • 潭州课堂25班:Ph201805201 并发 第九课 (课堂笔记)

     

     TCP/IP

    1,建立连接(三次握手)  

                

      1,客户端发起请求

      2,服务器请求回应

      3,请求确认,双方建立连接

    2,数据传输

    3,断开连接(四次挥手)

            

      1,客户端请求断开 连接

      2,服务器回应请求

      3,服务器向客户端请求断开连接

      4,客户端回应请求

     

    套接字:

        三种套按字:1,监听套接字;2,客户端套接字;3,对等套接字

    服务器

    #  服务器
    import socket
    
    server = socket.socket()        #  实例化
    # print(server)       #  监听套接字
    #   <socket.socket fd=368, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0>
    #                  唯一          地址家族(域)             套接字         TCP
    
    server.bind(('0.0.0.0',9001))   #   绑定ip,和端口,
    server.listen(5)                #   同时服务5个,
    # print(server)
    
    #   监听套接字
    #   <socket.socket fd=360, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 9001)>
    # server.accept()
    print(server.accept())
    
    #      对等连接套字,用于传输数据 连接成功时与客户端一至
    #   (<socket.socket fd=484, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9001), raddr=('127.0.0.1', 57015)>, ('127.0.0.1', 57015))
    

    客户端

    #  客户端
    import socket
    
    cllent = socket.socket()        #  实例化
    cllent.connect(('127.0.0.1',9001))      #  建立连接
    print(cllent)
    
    #   客户端 套接字
    #  <socket.socket fd=360, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0,
    
    
    #  laddr=('127.0.0.1', 56950), raddr=('127.0.0.1', 9001)>
    #    本地地址                   远程地地址
    

      

    服务器 a

    import socket
    server = socket.socket()
    server.bind(('',9000))
    server.listen(5)
    con,addr = server.accept()
    print(con,addr)
    
    #  con 是对等连接套接字
    #  con = <socket.socket fd=324, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9000), raddr=('127.0.0.1', 57162)>
    #   addr 是 连接通信地址,
    #  addr =   ('127.0.0.1', 57162)



    #  数据发送
    con.send(b'hi')

    #  接收客户端数据
    a = con.recv(1024)
    print(a)
    print(a.decode())
         ----》

      b'xe8x8axb1xe7x97xb4'
      花痴

     

    客户端 a

    import socket
    cllent = socket.socket()
    cllent.connect(('127.0.0.1',9000))

    # 数据接收
    r = cllent.recv(1024)
    print(r) # ----》b'hi'


    # 向服务器发数据
    cllent.send('花痴'.encode())

    # 关闭连接
    cllent.close()

      

     不能发送空值  ''   

    #服务器
    from socket import  *
    
    ip_port = ('127.0.0.1',9100)
    back_log = 5
    buf_siz = 1024
    
    # tcp_server = socket(AF_INET,SOCK_DGRAM)
    tcp_server = socket()
    #  tcp_server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)  #  在 linux 中重启如果 ip ,端口会被占用,可添加这行,
    tcp_server.bind( ip_port )      #  绑定 ip
    tcp_server.listen( back_log )
    
    while True:                             # 外层循环,为了服务多个人(要等待)
        conn,addr = tcp_server.accept()     #  接收   等待 TCP 进来 (阻塞)
        print('双向连接',conn)
        print('客户端地址:',addr)
    
        while True:                         #  内层循环,与一个人通信,
            try:
                data = conn.recv( buf_siz )    # 接收客户端数据
                print('来自客户端的数据:',data.decode('utf-8'))
                conn.send(data)                     # 回信息
            except Exception:
                break
        # conn.close()
    
    tcp_server.close()
    

      

    #客户端
    import socket,time
    client = socket.socket()
    client.connect(('127.0.0.1',9100))


    while True:
    c = input('--->>')
    if not c: continue # 输入空值,重来
    client.send(c.encode('utf-8'))
    print('客户端已经发送消息')
    time.sleep(0.1)
    data= client.recv(1024)
    print('收到服务器发来的信息:',data.decode())

    client.close()

      

    基于 TCP 服务端

      1, s = socket()   创建套接字,

      2, s.bind()  套接字绑定地址,

      3,s.listen()  监听,

      4,while True:       为了报备多人的外部循环

        5,c = s.accept()    接受客户端连接

          6, while True:     通信循环

            7,  recv,conn  对话,收发

          8,  c.close()    关闭客户端套接字

      9,s.close()          关闭服务器

    补充:UDB通信

    服务器:

    # -*- coding: utf-8 -*-
    
    from socket import*
    
    udp_server = socket(AF_INET,SOCK_DGRAM)
    udp_server.bind(('127.0.0.1',8080))
    
    while True:
        data,addr = udp_server.recvfrom(1024)
        print(data)
                    # 发送数据要带上客户端IP
        udp_server.sendto(data, addr)
    

    客户端:

    # -*- coding: utf-8 -*-
    
    from socket import*
    
    udp_cl = socket(AF_INET,SOCK_DGRAM)
    # udp_cl = socket()
    
    while True:
        ma = input('--->>>')
    
                        #                  服务器 ip
        udp_cl.sendto(ma.encode('utf8'),('127.0.0.1',8080))
        data, addr = udp_cl.recvfrom(1024)
        print(data.decode('utf8'))
    

      

  • 相关阅读:
    Protobuf通信协议
    python发送消息到activeMQ后java接收到BinaryMessage的坑
    golang time.Duration() 问题
    golang操作redis
    golang之网络编程
    golang之反射
    golang之goroutine和channel
    golang之单元测试
    golang之文件操作
    XmlHelper 工具类
  • 原文地址:https://www.cnblogs.com/gdwz922/p/9296650.html
Copyright © 2011-2022 走看看