最近看了socket通信相关知识,写了两个小程序,一个是基于socket套接字的,一个基于socketserver
1、socket
server:
socket()sock_stream为tcp/ip协议,AF_INET为ipv4
bind()绑定
listen()监听,可以连接5个客户端
from socket import *
from time import ctime
HOST='127.0.0.1'
PORT=8888
BUFSIZ=1024
ADDR=(HOST,PORT)
tcpSerSock=socket(AF_INET,SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)
while True:
print 'waiting for connection...'
tcpCliSock,addr=tcpSerSock.accept()
print '....connected from :',addr
while True:
data=tcpCliSock.recv(BUFSIZ)
print data
if not data:
break
data=raw_input(">")
if not data:
break
tcpCliSock.send('[%s] %s' %(ctime(),data))
tcpCliSock.close()
tcpSerSock.close()
client:
recv:接收数据
send:发送数据
HOST='127.0.0.1'
PORT=8888
BUFSIZ=1024
ADDR=(HOST,PORT)
tcpCliSock = socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect(ADDR)
while True:
data=raw_input('>')
if not data:
break
tcpCliSock.send(data)
data=tcpCliSock.recv(BUFSIZ)
if not data:
break
print data
tcpCliSock.close()
2、socketserver
server:
from socket import *
from time import ctime
import traceback
#from SocketServer import(TCPServer import as TCP,StreamRequestHandler as SRH)
from SocketServer import (TCPServer as TCP, StreamRequestHandler as SRH)
HOST='127.0.0.1'
PORT=12318
BUFSIZ=1024
ADDR=(HOST,PORT)
class MyRequestHandler(SRH):
def handle(self):
print '...connected from:', self.client_address
self.wfile.write('[%s] %s' % (ctime(), self.rfile.readline()))
tcpServ=TCP(ADDR,MyRequestHandler)
print 'waiting for connection...'
tcpServ.serve_forever()
client:
from socket import *
HOST='127.0.0.1'
PORT=12318
BUFSIZ=1024
ADDR=(HOST,PORT)
while True:
tcpCliSock=socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect(ADDR)
data=raw_input('>')
if not data:
break
tcpCliSock.send('%s\r\n'%data)
data=tcpCliSock.recv(BUFSIZ)
if not data:
break
print data.strip()
tcpCliSock.close()