一个基于TCP协议的简单客户/服务器架构

最近在看python中的socket模块,发现python网络编程比C++的网络编程容易不少。一边看书一边做才是王道啊。下面的实例参考《Python 核心编程》一书,这本书不错值得一看。
以下代码实现服务器与客户端简单的通信,先看看服务器端的伪代码实现流程(以下是单线程的,可以修改为多线程):

ss = socket() # 创建服务器套接字
ss.bind() # 把地址绑定到套接字上
ss.listen() # 监听连接
inf_loop: # 服务器无限循环
cs = ss.accept() # 接受客户的连接
comm_loop: # 通讯循环
cs.recv()/cs.send() # 对话(接收与发送)
cs.close() # 关闭客户套接字
ss.close() # 关闭服务器套接字(可选)

server端具体的代码是这样的

#coding=utf-8
#!/usr/bin/python

from socket import *

host = ''
port = 64444
bufsiz = 1024
addr = (host, port)

tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(addr)
tcpSerSock.listen(4)

while True:
 print 'waiting for connection...'
 tcpCliSock, addr = tcpSerSock.accept()
 print '...connected from:', addr

 while True:
 data = tcpCliSock.recv(bufsiz)
 if not data:
   break
 print '%s > %s' %(addr[0], data)
 serData = raw_input('>')
 tcpCliSock.send(serData)
 tcpCliSock.close()
tcpSerSock.close()

再看看客户端的伪代码实现流程,客户端简单一些:

cs = socket() # 创建客户套接字
cs.connect() # 尝试连接服务器
comm_loop: # 通讯循环
cs.send()/cs.recv() # 对话(发送/接收)
cs.close() # 关闭客户套接字

客户端的具体代码是这样的:

#coding=utf-8
#!/usr/bin/python

from socket import *

host = '192.168.5.254'
port = 64444
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()

测试他们之间的通信,先开启服务端监听客户请求,再开启客户端请求服务(当客户端请求服务时,服务端会被动连接客户端)
pythonsockettcp01
pythonsockettcp02
此时服务端和客户端已建立连接,可以进行通信了。
pythonsockettcp03pythonsockettcp04
pythonsockettcp05 pythonsockettcp06
pythonsockettcp07
转载请注明出处:http://www.xiaomastack.com/2014/07/10/pythonsockettcp/ 谢谢!

发表评论:

你的电子邮件地址将不会被公开.

2 × 5 =