• 传输层tcp协议以及scoket套字节方法


    一、传输层

    1、传输层的由来:

    网络层的IP帮我们区分子网

    以太网的Mac帮我们找到主机

    所以通过IP和Mac找到了一台特定的主机

    如何找到该特定主机的应用程序呢?

    答案是通过端口,端口即应用程序与网卡关联的编号

    2、传输层的功能:

    建立端口与端口的通信

    补充:端口范围0-65535 ,0-1023为系统占用端口

    二、TCP协议

    又称为好人协议以及可靠协议

    tcp是可靠的数据传输:

    最可靠的方式就是得不到确认,就重新发送数据报,知道得到对方的确认为止

    TCP建立了一个双向通路,实现了数据的三次握手和四次挥手

    三、socket介绍

    定义:

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

    服务端套接字函数

    s.bind()绑定(主机、端口号)到套字节

    s.listen()开始TCP监听

    s.accept()被动接受TCP客户的连接,(阻塞式)等待连接的到来

    客户端套字节函数

    s.connect()主动初始化TCP服务器连接

    公共用途的套字节函数

    s.recv()接收数据

    s.send()发送数据

    s.sendall()发送完整数据

    s.close()关闭套字节

                                 

    四、简单远程执行命令程序的开发
    #客户端
    import socket
    
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话
    phone.bind(('127.0.0.1',8081)) #插手机卡,补充:0-65535 0-1024给系统用的
    phone.listen(5) # 开机
    
    print('start...')
    conn,client_addr=phone.accept() # 等电话连接
    print('连接来了:',conn,client_addr)
    
    # 收发消息
    msg=conn.recv(1024) #收消息,1024是一个最大的限制
    print('客户端的消息: ',msg)
    conn.send(msg+b'SB')
    
    
    # 挂电话
    conn.close()
    # 关机
    phone.close()
    
    
    #服务端
    import socket
    
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话
    phone.connect(('127.0.0.1',8081)) # 拨电话,地址为服务端的ip和端口
    
    phone.send('你好'.encode('utf-8')) # 发消息b'hello'
    data=phone.recv(1024) #收消息
    
    print(data.decode('utf-8'))

    五、加上通讯循环与连接循环

    #服务端
    import socket
    
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    phone.bind(('127.0.0.1',8081))
    phone.listen(5)
    
    print('start...')
    while True: # 连接循环
        conn,client_addr=phone.accept()
        print('客户端 ',client_addr)
    
        while True: # 通信循环
            try:
                msg=conn.recv(1024)
                print('客户端的消息: ',msg)
                conn.send(msg+b'SB')
            except ConnectionResetError:
                break
        conn.close()
    phone.close()
    
    #客户端1
    mport socket
    
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话
    phone.connect(('127.0.0.1',8081)) # 拨电话,地址为服务端的ip和端口
    
    while True:
        msg=input('>>>: ').strip()
        phone.send(msg.encode('utf-8')) # 发消息b'hello'
        data=phone.recv(1024) #收消息
    
        print(data.decode('utf-8'))
    
    phone.close()
    
    
    #客户端2
    mport socket
    
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话
    phone.connect(('127.0.0.1',8081)) # 拨电话,地址为服务端的ip和端口
    
    while True:
        msg=input('>>>: ').strip()
        phone.send(msg.encode('utf-8')) # 发消息b'hello'
        data=phone.recv(1024) #收消息
    
        print(data.decode('utf-8'))
    
    phone.close()
    
    #客户端3、4.........
        

  • 相关阅读:
    2009 中国软件技术英雄会
    《致加西亚的信》一书中的一个隐蔽错误
    英文版XP不能打开带有中文路径的chm文件的解决办法
    NetBeans 时事通讯(刊号 # 49 Mar 17, 2009)
    对《致加西亚的信》的异议
    NetBeans 时事通讯(刊号 # 49 Mar 17, 2009)
    Linux运行时I/O设备的电源管理框架
    groovy正则提取完整版本
    Linux 流量监控软件 NetHogs
    Re: 在北京待着到底为了什么
  • 原文地址:https://www.cnblogs.com/sui776265233/p/8883253.html
Copyright © 2020-2023  润新知