Python - 网络基础
2016-05-19 23:28
477 查看
1. 服务器端 和 客户机端:
socket server:
import socket
so = socket.socket()
host = socket.gethostname() #获取本地服务器的名称
port = 8000#设置服务器端口
so.bind( (host, port) ) #绑定主机名和端口号, 类型是元组
so.listen(5) #设置最大的连接请求. 进入监听状态
while True:
c, addr =
so.accept() #如果成功连接上返回(client,地址), 地址是(host, port), host:
"192.168...之类"
print 'Got
connection from ', addr
c.send("Thank you for connecting") #向客户端发送消息
print
c.recv(1024) #从客户端接受消息, 再打印
c.close()
socket client:
import socket
so = socket.socket()
host = "192.168.0.103"#socket.gethostname() #设置服务器
#host = socket.gethostname()
port = 8000#设置服务器的端口号
so.connect( (host, port) ) #连接服务器
so.send("benson") #向服务器发送消息
print so.recv(1024) #接受来自服务器的消息并且打印
2. 各种服务器: TCPServer, FORKServer, ThreadServer, SelectServer,
TwistedServer
(每种服务器都有特色)
TCPServer:
from SocketServer import TCPServer, StreamRequestHandler
host = ''
port = 8000
addr = (host,port)
class Handle(StreamRequestHandler):
def
handle(self):
caddr = self.request.getpeername()
print 'Got connection from ', caddr
self.wfile.write('Thank you for connecting')
server = TCPServer(addr, Handle)
server.serve_forever()
forkServer:
from SocketServer import TCPServer, ForkingMixIn,
StreamRequestHandler
host = ''
port = 8000
addr = (host,port)
class Server(ForkingMixIn, TCPServer): pass
class Handle(StreamRequestHandler):
def
handle(self):
caddr = self.request.getpeername()
print 'Got connect from ', caddr
self.wfile.write('Thank you for connecting')
server = Server(addr, Handle)
server.serve_forever()
threadServer:
#! /usr/bin/env python
from SocketServer import TCPServer, ThreadingMixIn,
StreamRequestHandler
host = ''
port = 8000
addr = (host, port)
class Server(ThreadingMixIn, TCPServer): pass
class Handle(StreamRequestHandler):
def handle(self):
caddr =
self.request.getpeername()
print 'Got connection from ',
caddr
self.wfile.write('Thank you for
connecting!')
server = Server(addr, Handle)
server.serve_forever()
selectServer:
#! /usr/bin/env python
import socket, select
so = socket.socket()
host = ''#socket.gethostname()
port = 8000
so.bind((host, port))
so.listen(5)
inputs = [so]
while True:
rs, ws, es = select.select(inputs, [], [])
for r in rs:
if r is so:
c, caddr =
so.accept()
print 'Got
connection from ', caddr
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
twistedServer:
from twisted.internet import reactor
from twisted.internet.protocol import Protocol, Factory
class SimpleLogger(Protocol):
def
connectionMade(self):
print 'Got connection from ', self.transport.client
def
connectionLost(self, reason):
print self.transport.client, 'disconnected'
def
dataReceived(self, data):
print data
factory = Factory()
factory.protocol = SimpleLogger
reactor.listenTCP(8000, factory)
reactor.run()
下面是一个小实验: (使用多线程的服务器, 客户机循环发送请求)
server:
import SocketServer
from SocketServer import StreamRequestHandler, TCPServer
from time import ctime
host = ''
port = 8000
addr = (host,port)
class Handle(StreamRequestHandler):
def
handle(self):
caddr = self.request.getpeername()
print 'got connection from ', caddr
self.wfile.write('connection %s:%s at %s succeed!'
%(host,port,ctime()))
while True:
data = self.request.recv(1024)
if not data: break
print data
self.request.send("Thank you for connecting!")
print 'server is running...'
server = SocketServer.ThreadingTCPServer(addr, Handle)
#server = TCPServer(addr, Handle)
server.serve_forever()
client:
from socket import *
from time import *
host = '192.168.0.103'
port = 8000
addr = (host,port)
client = socket(AF_INET, SOCK_STREAM)
client.connect(addr)
while True:
sleep(2)
# delay 2 seconds
data =
"client1" #raw_input("Input something or 'exit' to quit: ")
if not data
or data == 'exit': break
client.send('%s' % data)
data =
client.recv(1024)
if not data:
break
print
data.strip()
client.close()
Ubuntu结果显示: (3个client端, 将data延迟2s发送一次的结果)
在浏览器上 127.0.0.1:端口号 (保留地址, 本地程序测试可用) 也可以发送请求
(好神奇啊~~挺好玩的~~)
socket server:
import socket
so = socket.socket()
host = socket.gethostname() #获取本地服务器的名称
port = 8000#设置服务器端口
so.bind( (host, port) ) #绑定主机名和端口号, 类型是元组
so.listen(5) #设置最大的连接请求. 进入监听状态
while True:
c, addr =
so.accept() #如果成功连接上返回(client,地址), 地址是(host, port), host:
"192.168...之类"
print 'Got
connection from ', addr
c.send("Thank you for connecting") #向客户端发送消息
c.recv(1024) #从客户端接受消息, 再打印
c.close()
socket client:
import socket
so = socket.socket()
host = "192.168.0.103"#socket.gethostname() #设置服务器
#host = socket.gethostname()
port = 8000#设置服务器的端口号
so.connect( (host, port) ) #连接服务器
so.send("benson") #向服务器发送消息
print so.recv(1024) #接受来自服务器的消息并且打印
2. 各种服务器: TCPServer, FORKServer, ThreadServer, SelectServer,
TwistedServer
(每种服务器都有特色)
TCPServer:
from SocketServer import TCPServer, StreamRequestHandler
host = ''
port = 8000
addr = (host,port)
class Handle(StreamRequestHandler):
def
handle(self):
caddr = self.request.getpeername()
print 'Got connection from ', caddr
self.wfile.write('Thank you for connecting')
server = TCPServer(addr, Handle)
server.serve_forever()
forkServer:
from SocketServer import TCPServer, ForkingMixIn,
StreamRequestHandler
host = ''
port = 8000
addr = (host,port)
class Server(ForkingMixIn, TCPServer): pass
class Handle(StreamRequestHandler):
def
handle(self):
caddr = self.request.getpeername()
print 'Got connect from ', caddr
self.wfile.write('Thank you for connecting')
server = Server(addr, Handle)
server.serve_forever()
threadServer:
#! /usr/bin/env python
from SocketServer import TCPServer, ThreadingMixIn,
StreamRequestHandler
host = ''
port = 8000
addr = (host, port)
class Server(ThreadingMixIn, TCPServer): pass
class Handle(StreamRequestHandler):
def handle(self):
caddr =
self.request.getpeername()
print 'Got connection from ',
caddr
self.wfile.write('Thank you for
connecting!')
server = Server(addr, Handle)
server.serve_forever()
selectServer:
#! /usr/bin/env python
import socket, select
so = socket.socket()
host = ''#socket.gethostname()
port = 8000
so.bind((host, port))
so.listen(5)
inputs = [so]
while True:
rs, ws, es = select.select(inputs, [], [])
for r in rs:
if r is so:
c, caddr =
so.accept()
print 'Got
connection from ', caddr
inputs.append(c)
else:
try:
data
= r.recv(1024)
disconnected
= not data
except
socket.error:
disconnected
= True
if
disconnected:
r.getpeername(), 'disconnected'
inputs.remove(r)
else:
data
twistedServer:
from twisted.internet import reactor
from twisted.internet.protocol import Protocol, Factory
class SimpleLogger(Protocol):
def
connectionMade(self):
print 'Got connection from ', self.transport.client
def
connectionLost(self, reason):
print self.transport.client, 'disconnected'
def
dataReceived(self, data):
print data
factory = Factory()
factory.protocol = SimpleLogger
reactor.listenTCP(8000, factory)
reactor.run()
下面是一个小实验: (使用多线程的服务器, 客户机循环发送请求)
server:
import SocketServer
from SocketServer import StreamRequestHandler, TCPServer
from time import ctime
host = ''
port = 8000
addr = (host,port)
class Handle(StreamRequestHandler):
def
handle(self):
caddr = self.request.getpeername()
print 'got connection from ', caddr
self.wfile.write('connection %s:%s at %s succeed!'
%(host,port,ctime()))
while True:
data = self.request.recv(1024)
if not data: break
print data
self.request.send("Thank you for connecting!")
print 'server is running...'
server = SocketServer.ThreadingTCPServer(addr, Handle)
#server = TCPServer(addr, Handle)
server.serve_forever()
client:
from socket import *
from time import *
host = '192.168.0.103'
port = 8000
addr = (host,port)
client = socket(AF_INET, SOCK_STREAM)
client.connect(addr)
while True:
sleep(2)
# delay 2 seconds
data =
"client1" #raw_input("Input something or 'exit' to quit: ")
if not data
or data == 'exit': break
client.send('%s' % data)
data =
client.recv(1024)
if not data:
break
data.strip()
client.close()
Ubuntu结果显示: (3个client端, 将data延迟2s发送一次的结果)
在浏览器上 127.0.0.1:端口号 (保留地址, 本地程序测试可用) 也可以发送请求
(好神奇啊~~挺好玩的~~)
相关文章推荐
- ACM: 图论题 poj 1149 网络流问题
- Jmeter(7)调试工具---HTTP Mirror Server
- ACM: 网络流 图论 poj 1459
- Jmeter(4)Http Cookie Manager
- 网络多线程02
- Linux:网络编程 (上)
- Linux:网络编程 (下)
- dinic网络流前向星写法
- jmeter(3)简单的HTTP请求(非录制)
- Android-HTTP网络编程和Soket
- 由Volley使用HttpURLConnection请求所引起的问题的解决过程
- (转)IOS http请求的get 和 post的请求的区别
- XMLHTTPRequest
- TCP/IP 协议大致的概念
- 网络--三种网络通讯方式及Android的网络通讯机制
- XML解析
- 人工神经网络入门
- Session技术分析与理解
- 基于http方式的git服务器搭建
- 关于UrlHttpConnection.setRequestProperty()的调用顺序问题的验证