zoukankan      html  css  js  c++  java
  • 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
    我们的征途是星辰大海
  • 相关阅读:
    【C# 代码小技巧】巧用 linq select 实现遍历集合返回元素 index
    [转载] redis 学习
    Html5 Canvas斗地主游戏
    K-近邻算法(KNN)
    Sql 把Xml字符串转换成一张表
    Asp.Net Mvc4分页,扩展HtmlHelper类
    SQL 分割字符串
    http://q.cnblogs.com/q/54251/
    读强化学习论文之MADDPG
    【回归】记Paddle强化学习训练营
  • 原文地址:https://www.cnblogs.com/honey-badger/p/8372679.html
Copyright © 2011-2022 走看看