1. 服务器端 和 客户机端:
socket server:
import socket
so = socket.socket()
host = socket.gethostname() #获取本地服务器的名称
port = 8000#设置服务器端口
so.bind( (host, port) ) #绑定主机名和端口号, 类型是元组
so.listen(5) #设置最大的连接请求. 进入监听状态
while True:
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):
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):
server = Server(addr, Handle)
server.serve_forever()
threadServer:
#! /usr/bin/env python
from SocketServer import TCPServer, ThreadingMixIn, StreamRequestHandler
host = ''
port =
addr = (host, port)
class Server(ThreadingMixIn, TCPServer): pass
class Handle(StreamRequestHandler):
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:
twistedServer:
from twisted.internet import reactor
from twisted.internet.protocol import Protocol, Factory
class SimpleLogger(Protocol):
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):
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:
client.close()
Ubuntu结果显示: (3个client端, 将data延迟2s发送一次的结果)