zoukankan      html  css  js  c++  java
  • Python爬虫--网络编程

    Python 网络编程

    Python提供两个基本的Socket模块:

    • Socket,提供了标准的BSD Sockets API
    • SocketServer, 提供了服务器中心类,可以简化网络服务器的开发

    1、Socket类型
    套接字格式为: socket(family, type[,protocall]),使用给定的地址族、套接字类型、协议类型(默认为0)创建套接字。

    2、Socket函数

    TCP编程

    服务端
    1. 创建Socket,绑定Socket到本地IP和端口
    2. 开始监听连接
    3. 进入循环,不断接收客户端的连接请求
    4. 接收传来的数据,并发送给对方数据、
    5. 传输完毕后,关闭Socket
    # coding=utf8
    """
    1. 创建Socket,绑定Socket到本地IP和端口
    2. 开始监听连接
    3. 进入循环,不断接收客户端的连接请求
    4. 接收传来的数据,并发送给对方数据
    5. 传输完毕后,关闭Socket
    """
    import socket
    import threading
    import time
    
    
    def dealClient(sock, addr):
        # 4. 接收传来的数据,并发送给对方数据
        print 'Accept new connection from %s:%s...' % addr
        sock.send(b'Hello, I am server!')
        while True:
            data = sock.recv(1024)
            time.sleep(1)
            if not data or data.decode('utf-8') == 'exit':
                break
            print '-->>%s!' % data.decode('utf-8')
            sock.send('Loop_Msg: %s!' % data.decode('utf-8').encode('utf-8'))
        # 5. 传输完毕后,关闭Socket
        sock.close()
        print 'Connection from %s:%s closed.' % addr
    
    if __name__ == '__main__':
        # 1. 创建Socket,绑定Socket到本地IP和端口
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.bind(('127.0.0.1',9999))
        # 2. 开始监听连接
        s.listen(5) # listen(n)传入的值, n表示的是服务器拒绝(超过限制数量的)连接之前,操作系统可以挂起的最大连接数量。n也可以看作是"排队的数量"
        print 'Waiting for connection...'
        # 3. 进入循环,不断接收客户端的连接请求
        while True:
            sock, addr = s.accept()
            t = threading.Thread(target=dealClient, args=(sock, addr))
            t.start()
    
    客户端
    1. 创建Socket,连接远端地址
    2. 连接后发送数据和接收数据
    3. 传输完毕后,关闭Socket
    # coding=utf8
    """
    1. 创建Socket,连接远端地址
    2. 连接后发送数据和接收数据
    3. 传输完毕后,关闭Socket
    """
    import socket
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('127.0.0.1', 9999))
    print '-->>'+s.recv(1024).decode('utf-8')
    s.send(b'Hello I am a client')
    print '-->>'+s.recv(1024).decode('utf-8')
    s.send(b'exit')
    s.close()
    

    UDP 编程

    服务端
    1. 创建Socket,绑定指定的IP和端口
    2. 直接发送数据和接收数据
    3. 关闭Socket
    # coding=utf8
    import socket
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.bind(('127.0.0.1',9999))
    print 'Bind UDP on 9999...'
    while True:
        data, addr = s.recvfrom(1024)
        print 'Received from %s:%s' % addr
        s.sendto(b'Hello, %s!' % data, addr)
    
    客户端

    与TCP不同,UDP客户端不需要建立连接,创建Socket后可以直接后服务端进行数据交换

    # coding=utf8
    import socket
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    for data in [b'Hello',b'World']:
        s.sendto(data,('127.0.0.1',9999))
        print s.recv(1024).decode('utf-8')
    s.close()
    

    作者:lykxbg —— 来一块小饼干

    出处:http://www.cnblogs.com/lykxbg/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    指针的相关概念
    Linux库函数
    计算机组成
    常用校验码及示例
    判断文件是否被占用的三种方法
    服务主机superFetch占用磁盘过多
    renameTo()判断文件是否被占用(判断大文件是否完成拷贝这个动作)
    xshell下mysql数据库只导出表结构不导出数据
    Java_判断文件是否写入完成
    Java_监听文件夹或者文件是否有变动
  • 原文地址:https://www.cnblogs.com/lykxbg/p/11991922.html
Copyright © 2011-2022 走看看