zoukankan      html  css  js  c++  java
  • 10 TCP 传输控制协议 UDP区别

    1.tcp和udp区别

        

        

     2.TCP通信模型

    生活中的电话机

    如果想让别人能更够打通咱们的电话获取相应服务的话,需要做一下几件事情:

    1. 买个手机
    2. 插上手机卡
    3. 设计手机为正常接听状态(即能够响铃)
    4. 静静的等着别人拨打

        

        

    3.tcp服务器

    如同上面的电话机过程一样,在程序中,如果想要完成一个tcp服务器的功能,需要的流程如下:

    1. socket创建一个套接字
    2. bind绑定ip和port
    3. listen使套接字变为可以被动链接
    4. accept等待客户端的链接
    5. recv/send接收发送数据

    一个很简单的tcp服务器如下:

        

    from socket import *
    server_socket = socket(AF_INET, SOCK_STREAM)
    
    server_socket.bind(("",8899))
    
    server_socket.listen(5)
    
    client_socket,client_info = server_socket.accept()
    #client_socket 表示这个新的客户端
    #client_info 表示这个新的客户端的ip port
    
    recv_data = client_socket.recv(1024)
    
    print("%s:%s"%(str(client_info),recv_data))
    
    client_socket.close()
    server_socket.close()

         

        

     

    4.tcp服务器详解

    from socket import *
    
    server_socket = socket(AF_INET,SOCK_STREAM)
    server_socket.bind(("",8899))
    server_socket.listen(5)
    
    print ("----1---")
    client_socket,client_info = server_socket.accept()
    
    print ("----2---")
    recv_data = client_socket.recv(1024)
    
    print ("----3--")
    print("%s:%s"%(str(client_info),recv_data))
    
    client_socket.close()
    server_socket.close()

      

      1)启动服务器

        

      2)连接服务器

          

      3)发送消息

        

        

     5.tcp客户端

        

    from socket import *
    
    client_socket = socket(AF_INET,SOCK_STREAM)
    client_socket.connect(("192.168.123.1",8989))
    
    #注意:
    #1.tcp客户端已经链接好了服务器,所以在以后的数据发送中,不需要填写对方的ip,port-----》打电话
    #2.udp在发送数据的时候,因为没有之前的链接,所以需要在每次的发送中都要填写接受方的ip,port----》写信
    
    client_socket.send("haha".encode("gb2312"))
    
    recv_data = client_socket.recv(1024)
    
    print("recv_data:%s"%recv_data)
    
    client_socket.close()

         

         

        

    6.完整代码

      1)tcp服务端

    #coding=utf-8
    from socket import *
    
    # 创建socket
    tcpSerSocket = socket(AF_INET, SOCK_STREAM)
    
    # 绑定本地信息
    address = ('', 7788)
    tcpSerSocket.bind(address)
    
    # 使用socket创建的套接字默认的属性是主动的,使用listen将其变为被动的,这样就可以接收别人的链接了
    tcpSerSocket.listen(5)
    
    # 如果有新的客户端来链接服务器,那么就产生一个新的套接字专门为这个客户端服务器
    # newSocket用来为这个客户端服务
    # tcpSerSocket就可以省下来专门等待其他新客户端的链接
    newSocket, clientAddr = tcpSerSocket.accept()
    
    # 接收对方发送过来的数据,最大接收1024个字节
    recvData = newSocket.recv(1024)
    print '接收到的数据为:',recvData
    
    # 发送一些数据到客户端
    newSocket.send("thank you !")
    
    # 关闭为这个客户端服务的套接字,只要关闭了,就意味着为不能再为这个客户端服务了,如果还需要服务,只能再次重新连接
    newSocket.close()
    
    # 关闭监听套接字,只要这个套接字关闭了,就意味着整个程序不能再接收任何新的客户端的连接
    tcpSerSocket.close()

      2)tcp客户端

    #coding=utf-8
    from socket import *
    
    # 创建socket
    tcpClientSocket = socket(AF_INET, SOCK_STREAM)
    
    # 链接服务器
    serAddr = ('192.168.1.102', 7788)
    tcpClientSocket.connect(serAddr)
    
    # 提示用户输入数据
    sendData = raw_input("请输入要发送的数据:")
    
    tcpClientSocket.send(sendData)
    
    # 接收对方发送过来的数据,最大接收1024个字节
    recvData = tcpClientSocket.recv(1024)
    print '接收到的数据为:',recvData
    
    # 关闭套接字
    tcpClientSocket.close()
  • 相关阅读:
    matlab矩阵中如何去掉重复的行;如何找到相同的行,并找到其位置
    Coursera 机器学习 第9章(下) Recommender Systems 学习笔记
    机器学习基石笔记1——在何时可以使用机器学习(1)
    Coursera 机器学习 第9章(上) Anomaly Detection 学习笔记
    matlab安装过程的被要求的配置程序
    jdk环境变量配置
    Coursera 机器学习 第8章(下) Dimensionality Reduction 学习笔记
    Coursera 机器学习 第8章(上) Unsupervised Learning 学习笔记
    Coursera 机器学习 第7章 Support Vector Machines 学习笔记
    linux服务器---squid限制
  • 原文地址:https://www.cnblogs.com/venicid/p/7995090.html
Copyright © 2011-2022 走看看