• Python网络编程常用代码


    服务器端代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    # -*- coding: cp936 -*-
    import socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#初始化socket
    sock.bind(("127.0.0.1", 8001))#绑定本机地址,8001端口
    sock.listen(5)#等待客户连接
    while True:
      print "waiting client connection..."
      connection,address = sock.accept()#接收客户连接请求
      print "a client have connected..."
      while True:
        try:
          connection.settimeout(5) #设置超时时间
          buf = connection.recv(1024) #接收数据
          if buf == "1":
            connection.send("you have send me 1!welcome to server!")
          elif buf=="2":
            connection.send("you have send me 2!I have recv!")
          elif buf=="3":
            connection.send("close the connection!")
            break
          else:
            connection.send("unknow command!")
        except socket.timeout:
          print "time out"
      connection.close()
      print "a client exit..."

    客户器端代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect(("127.0.0.1", 8001))
    import time
    time.sleep(2)
    while True:
      data=raw_input("input command:");
      sock.send(data)
      print sock.recv(1024)
      if data=="3":
        break
    sock.close()

    1.首先开两个IDLE,分别打开服务器端和客户器端代码。
    2.F5运行服务器端代码,会出现waiting client connection...
    3.F5运行客户端代码,会出现input command: ;
    4.这时服务器和客户端就连接上了,可以正常的通信啦,如图:

    5.再次运行服务器端代码时会出现错误,这时可以通过任务管理器,将其中的pythonw.exe进程结束,重新打开,编译就可以啦!

    客户端:

    1
    2
    3
    4
    5
    6
    import socket
    s=socket.socket()
    host = socket.gethostname()
    port = 1234
    s.connect((host, port))
    print s.recv(1024)

    服务端:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import socket
    s = socket.socket()
    host = socket.gethostname()
    port = 1234
    s.bind((host, port))
      
    s.listen(5)
    while True:
     c, addr = s.accept()
     print 'Got connection from', addr
     c.send('Thank you for connecting')
     c.close()

    http编程

    1
    2
    from urllib import urlopen
    webpage = urlopen('http://www.python.org')

    加上正规表达式

    1
    2
    3
    4
    import re
    text = webpage.read()
    m = re.search('<a href="([^"]+)" .*?>about</a>', text, re.IGNORECASE)
    m.group(1)

    urllib
    urllib2

    一个基于SocketServer的小型服务器例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    from SocketServer import TCPServer, StreamRequestHandler
    >>> class Handler(StreamRequestHandler):
        def handle(self):
            addr = self.request.getpeername()
            print 'Got connection from', addr
            self.wfile.write('Thank you for connecting')
      
    >>> server = TCPServer(('',1234), Handler)
    >>> server.serve_forever()

    使用SocketServer进行分叉和线程处理
    分叉Server:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    from SocketServer import TCPServer,ForkingMinIn, StreamRequestHandler
    class Server(ForkingMinIn, TCPServer):pass
    class Handler(StreamRequestHandler):
     def handle(self):
      addr = self.request.getpeername()
      print 'Got connection from',addr
      self.wfile.write('Thank you for connection')
    server = Server(('',1234),Handler)
    server.serve_forever()

    线程Server:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    from SocketServer import TCPServer, ThreadingMixIn, StreamRequestHandler
    class Server(ThreadingMixIn, TCPServer):pass
    class Handler(StreamRequestHandler):
     def handle(self):
      addr = self.request.getpeername()
      print 'Got connection from',addr
      self.wfile.write('Thank you for connecting')
    server = Server(('',1234),Handler)
    server.serve_forever()

    带有select和pool的异步I/O
    select服务:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    import socket, select
    s = socket.socket()
    host = socket.gethostname()
    prot = 1234
    s.bind((host,port))
      
    s.listen(5)
    inputs = [s]
    while True:
     rs,ws,es = select.select(inputs,[],[])
     for r in rs:
      if r is s:
      c, addr = s.accept()
      print 'Got connection from',addr
      inputs.append(c)
     else:
      try:
       data = r.recv(1024)
       disconnected = not data
      except socket.error:
       disconnected = True
        
      if disconnected:
       print r.getpeername(), 'disconnected'
       inputs.remove(r)
      else:
       print data

    pool服务器:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    import socket, select
    s = socket.socket()
    host = socket.gethostname()
    port = 1234
    s.bind((host, port))
      
    fdmap = {s.fileno():s}
      
    s.listen(5)
    p = select.poll()
    p.register(s)
    while True:
     events = p.poll()
     for fd, event in events:
      if fd in fdmap:
       c, addr = s.accept()
       print 'Got connection from', addr
       p.register(c)
       fdmap[c.fileno()]=c
      elif event & select.POLLIN:
       data = fdmap[fd].recv(1024)
       if not data:
        print fdmap[fd].getpeername(),'disconnected'
        p.unregister(fd)
        del fdmap[fd]
      else:
       print data
  • 相关阅读:
    String.equals()方法、整理String类的Length()、charAt()、 getChars()、replace()、 toUpperCase()、 toLowerCase()、trim()、toCharArray()
    课后作业
    课后02
    课程作业02
    JAVA验证
    此程序从命令行接收多个数字,求和之后输出结果
    <<大道至简>>伪代码
    《大道至简》读后感
    springcloud和springboot是什么关系?
    python 自定义模块的发布和安装
  • 原文地址:https://www.cnblogs.com/HacTF/p/8257815.html
Copyright © 2020-2023  润新知