zoukankan      html  css  js  c++  java
  • python网络编程学习

    网络通信

      边缘网络中的主机数目庞大,计算机网络是如何实现网络中的两台主机之间的通信的呢?

      简单的来说,计算机网络中的主机通信如同现实生活中的物流,当我们需要发送一个快递时,我们需要首先需要准备自己要发送的物品,相当于网络体系结构中的应用层,编写自己的发送的消息;第二,要发送的物品往往需要一个外包装,避免物品的损坏,相当于应用层的消息传递到传输层进行的封装(消息封装为分组);第三,填写快递单的收发地址,于网络层中填写IP,端口地址相同;第四,将快递交给站点准备发送,等价于在链路层将分组数据包封装成帧,准备在物理层发送;最后,快递员通过既定的物流路线将快递发送出去,与在物理层通过路由信息表将帧发送出去相同。

    网络数据包传送

      网络中数据包的传送大致分为两类:

    1.   TCP传送:基于TCP协议,完成完整的3此握手过程,实现可靠的信息传送,能够保证发送的消息一定能够传送到接收方。
    2.   UDP传送:基于UDP协议,类似于洪泛传送,不会完成3此握手过程,因此不能够保证发送的消息一定能够被接收方接收

    Socket编程

      python通过使用socket抽象网络中主机进程之间的交互实现网络通信。Socket实现了IP地址与端口的抽象,其中IP指定了主机在网络中的位置,端口指定了主机上接收,发送信息的应用程序。

      python中,Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。

      服务器端Socket编程

        创建Socket对象

        绑定到相应的IP地址端口

        打开监听服务

        接收数据

        关闭Socket

      客户端Socket编程

        创建Socket对象

        连接到远程主机IP地址端口

        发送数据

        关闭Socket

    Socket对象创建函数

        socket.socket([family[, type[, proto]]])

        familly:对应协议簇,AF_UNIX或者AF_INET

        type:对应面向连接的还是非连接分为SOCK_STREAMSOCK_DGRAM(TCP和UDP)

        proto:协议,HTTP,SMTP等

      Socket内置方法

        服务器:

          s.bind():绑定地址

          s.listen():开启监听服务

          s.accept():被动等待接收客户端的连接请求

        客户端:

          s.connect():连接到远程主机

        公用:

          s.recv():接收TCP数据流

          s.send():发送TCP数据流

          s.recvfrom():接收UDP数据流

          s.sendto():发送UDP数据流

          s.close():关闭一个socket连接

          s.getpeername():返回连接套接字的远程地址

          s.getsockname():返回套接字自己的地址

          s.setsockopt():设置给定套接字选项的值

          s.getsockopt():返回套接字选项的值

          s.makefile():创建一个与该套接字相关连的文件

    实例

        

    # -*- coding: utf-8 -*-
    
    import socket
    
    s = socket.socket() #创建socket对象
    host = socket.gethostname() #获取本机主机名
    port = 20000
    s.bind((host, port))
    
    s.listen(5) #开启监听服务,5表示最大可以连接5个客户机
    
    while True:
        c, address = s.accept() #建立一个客户连接
        print '客户端地址:', address 
        c.send('hello') #向客户端发送消息
        c.close() #关闭一个socket连接
    Server Code
    # -*- coding: utf-8 -*-
    
    import socket
    
    s = socket.socket() #创建socket对象
    
    host = socket.gethostname() #调用socket类方法获取主机名
    port = 20000 #定义绑定端口
    
    s.connect((host, port)) #连接到远程主机
    
    print s.recv(1024) #接收数据,1024是字节数
    s.close() #关闭一个socket连接
    Client Code

      

  • 相关阅读:
    为什么未来是全栈project师的世界?
    剑指Offer面试题10(Java版):二进制中的1的个数
    arm-linux内存管理学习笔记(1)-内存页表的硬件原理
    高速掌握Lua 5.3 —— 字符串库 (2)
    C语言实现使用动态数组来构造栈结构
    [自学AndroidStudio系列]第二篇章:高速上手AS小技巧其一
    苹果新的编程语言 Swift 语言进阶(十三)--类型检查与类型嵌套
    JAVA 安装JDK注意事项
    hdu 1398 Square Coins(母函数)
    百度有道雅虎的实习面试经历
  • 原文地址:https://www.cnblogs.com/lichao-normal/p/8094689.html
Copyright © 2011-2022 走看看