当前位置:首页 > Python教程 > python技巧

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

原文:https://www.cnblogs.com/HacTF/p/8257815.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐