建立内网日记是为了实现交互的效果,使用的协议是比较简单的UDP协议,通过socket进行通讯功能,实现C/S 模型,这里有必要说一下socket,在加入开智学院之前我是根本不知道什么是socket,经过在网上一通搜索,socket大概说的是,就像电话的听筒,只有在client和server两端都建立socket才能实现client与server之间的通讯,并且UDP的特点就是信息传输快,缺点是容易丢包,不过先不管这些了,开始coding.......
使用的编程语言是python2.7.10,调试环境是win7下的powershell ,主要要实现以下功能
- client每发一行信息server都有显示出信息的内容
- 每一行的信息都要保存在本地server端
- client输入指定的命令,server端就要把信息传输给client并打印出来
接下来是socket的基本建立过程
-
server
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_addr = ('127.0.0.1', 6666)
size = 1024
server.bind(server_addr)while 1: #服务端保持一直接收信息 data, addr = server.recvfrom(size) if data == 'q':#接收到client端q指令退出while关闭服务器 print 'quit...' break elif data == 'h': daily = open('socket_daily.log','r').read() server.sendto(daily, addr) elif data == '': print "nothing, client is closing..." else: print 'data:', data, 'from',addr, 'save to socket_daily.log ...' daily = open("socket_daily.log", 'a+') current_time = time.strftime('[%Y-%m-%d %H:%M:%S]') daily.write(current_time +' '+ data +'\n') daily.close() server.close()
-
client
# -*- coding:utf-8 -*- import socket client =socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#UDP server_addr = ('127.0.0.1',6666) print ''' [h] for history [q] close server [ENTRE] close client write your daily now... ''' while 1: message = raw_input('>>')#输入q关闭服务器 client.sendto(message, server_addr) if message == '':#退出while关闭client break elif message == 'h': daily = open('socket_daily.log') print '*'*10,'history','*'*10 print daily.read() print '*'*10,'history','*'*10 client.close()
代码一共没有多少行,基本实现了client 与server的交互环境,比较有意思的地方是,client与server间的互想通讯,每个server接收到client的信息后就要进行判断并做出反应,这里在设置socket时也要注意,server端要bind到一个address和port上,这样client才知道把数据包发到哪里,而与server相对应的接口也就是client的address和port就不一定是固定的了,是随机的,可能每次新建立起来的通讯用到的都不一样,只要记住server是固定的就行了,还有一点就是client与server是通过 ** 互相传递过来的信息做为判断来执行一系列动作的 **
下面是测试效果
QQ截图20151120230910.png
网友评论