zoukankan      html  css  js  c++  java
  • python-网络编程-01

    我们常说的计算机网络通信,值得是两台,或者多台计算机间,进行数据传输。

    从计算机网络发展至今,人们使用了很多协议,但是最常用的还是tcp/ip协议,实际上这是一组协议。

    当然使用python做网络编程的时候,我们通常都会在tcp/ip协议上面编程。也就是我们不需要关心,tcp/ip层真正传输层协议

    【1】 socket

    通常我们可以这么理解socket -->用来标识远程主机上面的某一个进程。

    当我们的客户端请求,发送到服务器的网口上面去之后,操作系统让哪个进程去处理它呢?

    socket解决的就是这个问题。

    就相当于,我们去大厦里面找一个公司一样,通常都会有xx大厦几楼几零几。

    socket在服务器角度来看,其实就是一个文件(unix/linux),准确的说,是一个文件描述符(一般指的就是文件,或者类似文件的实体)

    对socket的操作,其实跟对文件的操作是极其相似的比如recv()和read()

    # -*- coding: utf-8 -*
    __author__ = 'Administrator'
    import socket
    def handle_request(client):
        buf = client.recv(1024)
        client.send("HTTP/1.1 200 OK
    
    ")
        client.send("Hello, World")
    
    def main():
        '''
        问题:如果想在小吃街开一家包子铺,总共需要几步
        '''
    
        # 【1】 取得经营许可证--->创建socket对象吧
        sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        #【2】找一家铺子开张-->监听socket
        sock.bind(('localhost',8080))
        sock.listen(5)
    
        #【3】开张
        while True:
            #【4】等客上门啊
            connetction,address = sock.accept()
            #connetction,address 分别是客户端对象和客户端地址44
            handle_request(connetction)
            connetction.close()
    
    if __name__ == '__main__':
        main()
    

      【2】socket 的建立

    import socket
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.connect(("www.baidu.com",80))
    

     我们可以看看这三行代码,最简单的socket的客户端代码

    #1 在python中我们想创建socket的时候 可以直接导入socket模块 通过实例化来获得socket对象

    #2 我们首先实例化了socket.socket,并且实例化过程中传递了两个参数 这里的AF_INET 值得是通信类型 这里指的是ipv4 而SOCK_STERAM 值得是协议 这里指的是TCP协议

    import socket
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    port = socket.getservbyname('http','tcp')
    print port
    s.connect(("www.baidu.com" ,port))
    

    #getservbyname 这个函数 默认维持一个庫,可以获取某个协议监听的tcp端口号 当然这个协议监听的端口号 是标准的 我们这里获取的http 当然你也可以换成udp

    【2】socket 的异常

    python 的socket 的模块定义了四种错误

    1> 与一般I/O的通信问题有关的 socket.error

    2>与查询地址有关的socket.herror

    3>与其他地址错误有关的socket.herror(和c语言中的h_errno相关

    4>与在一个socket上调用的settimeout()后处理超时有关的sock.timeout(需要2.3或者更高版本)

     当然我们能这些都是我们在大部分情况下能预见的错误

    但是在网络编程中,有的时候通信出现问题,却没有产生异常,因为对方没有传回错误

  • 相关阅读:
    为or、in平反——or、in到底能不能利用索引?
    【自然框架】稳定版beta1的Demo —— 四:角色管理。另外 在线演示 终于搞定了
    【自然框架】CMS之数据库设计
    【自然框架】——重开在线演示
    刘谦魔术的一个秘密 硬币穿越玻璃的那个。
    【自然框架】PowerDesigner 格式的元数据的表结构
    【自然框架】元数据的数据库结构的详细说明和示例(一):项目描述部分
    程序员与项目经理
    Android 中文API (70) —— BluetoothDevice[蓝牙]
    Android API 中文 (50) —— SpinnerAdapter
  • 原文地址:https://www.cnblogs.com/nerdlerss/p/6489295.html
Copyright © 2011-2022 走看看