美文网首页
内网日记

内网日记

作者: 果三代 | 来源:发表于2015-11-21 00:18 被阅读27次

    建立内网日记是为了实现交互的效果,使用的协议是比较简单的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

    相关文章

      网友评论

          本文标题:内网日记

          本文链接:https://www.haomeiwen.com/subject/lbglhttx.html