• socket 网络编程【实现10086接电话逻辑】


    Python 提供了两个级别访问的网络服务:

      低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法

      高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发

    socket()函数:

    Python 中,我们用 socket()函数来创建套接字,语法格式如下:

    socket.socket([family[, type[, proto]]])
    • family: 套接字家族可以使AF_UNIX或者AF_INET
    • type: 套接字类型可以根据是面向连接的还是非连接分为SOCK_STREAM(for TCP)SOCK_DGRAM(for UDP)
    • protocol: 一般不填默认为0
    sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)

    其它socket对象内建方法可参考:

    http://www.runoob.com/python/python-socket.html

    https://docs.python.org/2/library/socketserver.html

    示例:使用SocketServer实现中国移动客服接电话逻辑(异步多线程)

    server.py

     1 # !/usr/bin/python
     2 # -*- coding:utf-8 -*-
     3 '''
     4 _author_=Captain
     5 '''
     6 
     7 import SocketServer
     8 
     9 class Myserver(SocketServer.BaseRequestHandler):
    10     def setup(self):
    11         pass
    12     def handle(self):
    13         print self.request,self.client_address,self.server
    14         conn=self.request
    15         conn.sendall('欢迎致电 10086,请输入1xxx,0转人工服务.')
    16         Flag = True
    17         while Flag:
    18             data = conn.recv(1024)
    19             if data == 'exit':
    20                 Flag = False
    21             elif data == '0':
    22                 conn.sendall('通过可能会被录音.balabala一大推')
    23             else:
    24                 conn.sendall('请重新输入.')
    25     def finish(self):
    26         pass
    27 if __name__ == '__main__':
    28     server=SocketServer.ThreadingTCPServer(('127.0.0.1',9999),Myserver)
    29     server.serve_forever()
    View Code

    client.py

     1 # !/usr/bin/python
     2 # -*- coding:utf-8 -*-
     3 '''
     4 _author_=Captain
     5 '''
     6 
     7 import socket
     8 
     9 ip_port=('127.0.0.1',9999)
    10 conn = socket.socket()
    11 conn.connect(ip_port)
    12 while True:
    13     print conn.recv(1024)  #输出接收到的数据
    14     inp=raw_input("data:")
    15     conn.sendall(inp)
    16     if inp == 'exit':
    17         break
    18 
    19 conn.close()
    View Code
    我们的征途是星辰大海
  • 相关阅读:
    python的多进程
    sqlalchemy的缓存和刷新
    uuid
    区块链的理解
    列表推导式,两个for循环的例子
    Fiddler 抓包工具总结
    python---webbrowser模块的使用,用非系统默认浏览器打开
    使用jmeter做web接口测试
    selenium2中关于Python的常用函数
    Selenium2+Python自动化学习笔记(第1天)
  • 原文地址:https://www.cnblogs.com/honey-badger/p/8372679.html
Copyright © 2020-2023  润新知