python 网络编程常用代码段

 更新时间:2016年08月28日 18:37:11   投稿:mdxy-dxy  
这篇文章主要介绍了python 网络编程常用代码段,需要的朋友可以参考下

服务器端代码:

# -*- 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..."

客户器端代码:

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进程结束,重新打开,编译就可以啦!

客户端:

import socket
s=socket.socket()
host = socket.gethostname()
port = 1234
s.connect((host, port))
print s.recv(1024)

服务端:

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编程

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

加上正规表达式

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

urllib
urllib2

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

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:

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:

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服务:

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服务器:

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

Twisted网络框架

https://www.jb51.net/article/64199.htm

相关文章

  • python中reader的next用法

    python中reader的next用法

    这篇文章主要介绍了python中reader的next用法,分别介绍了python3中的用法和python2中的用法,具体实例代码大家参考下本文
    2018-07-07
  • Python处理字符串中文(汉字)编码的实例

    Python处理字符串中文(汉字)编码的实例

    这篇文章主要介绍了Python处理字符串中文(汉字)编码的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • python playwright 库上传和下载操作(自动化测试 playwright)

    python playwright 库上传和下载操作(自动化测试 playwright)

    这篇文章主要介绍了python playwright 库上传和下载操作(自动化测试 playwright ),playwright中的上传和下载比selenium的上传和下载要简便些,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • Python自制一个PDF转PNG图片小工具

    Python自制一个PDF转PNG图片小工具

    这篇文章主要为大家详细介绍了如何利用Python中的PyQt5自制一个PDF转PNG格式图片的小工具,文中的示例代码讲解详细,感兴趣的可以了解一下
    2023-02-02
  • Python3使用PyQt5制作简单的画板/手写板实例

    Python3使用PyQt5制作简单的画板/手写板实例

    下面小编就为大家带来一篇Python3使用PyQt5制作简单的画板/手写板实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • python Pandas 读取txt表格的实例

    python Pandas 读取txt表格的实例

    下面小编就为大家分享一篇python Pandas 读取txt表格的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • 利用Python实现多种风格的照片处理

    利用Python实现多种风格的照片处理

    这篇文章主要为大家详细介绍了如何利用Python一键实现多种风格的照片处理并制作可视化GUI界面,文中的示例代码讲解详细,感兴趣的可以了解一下
    2022-07-07
  • pampy超强的模式匹配工具的实现

    pampy超强的模式匹配工具的实现

    在自然语言处理界,模式匹配可以说是最常用的技术。甚至可以说,将NLP技术作为真实生产力的项目都少不了模式匹配。本文就介绍了pampy超强的模式匹配工具的实现,感兴趣的可以了解一下
    2021-07-07
  • 使用Python操作Jenkins的过程详解

    使用Python操作Jenkins的过程详解

    借助于Python中的python-jenkins模块,我们可以轻松地编写脚本来连接到Jenkins服务器,并执行各种操作,如创建、删除、构建Jobs等,这种自动化的方式不仅提高了效率,还使得CI/CD流程更加灵活和可控,本文介绍如何使用Python操作Jenkins的相关资料,需要的朋友可以参考下
    2024-05-05
  • Python logging模块写入中文出现乱码

    Python logging模块写入中文出现乱码

    这篇文章主要介绍了Python logging模块写入中文出现乱码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05

最新评论