内网日记

建立内网日记是为了实现交互的效果,使用的协议是比较简单的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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容