zoukankan      html  css  js  c++  java
  • python 客户端点对点通信小案例

    点对点通讯分为客户端和服务器,多个客户端通过服务器进行信息的交流

    服务器端代码  service端

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 
     4 import SocketServer
     5 import subprocess
     6 
     7 ##  代号 地址和端口 连接对象
     8 class myconn(object):   ##存放连接
     9     listconn = {}  ##  地址端口  连接对象
    10     # codeflage = {}  ##  代号   地址端号
    11 
    12 
    13 class MyServer(SocketServer.BaseRequestHandler):
    14 
    15     def setup(self):
    16         myconn.listconn[self.client_address] = self.request
    17         pass
    18 
    19     def handle(self):
    20         print("got connection from",self.client_address)
    21         while True:
    22             conn = self.request
    23             data = conn.recv(1024)
    24             if not data:
    25                 break
    26             print data
    27 
    28             #如果目标客户端在发送数据给目标客服端
    29             # 这里可以根据对方的ip和端口号来查找 我这里直接发给每一个用户了
    30             print len(myconn.listconn)
    31             if len(myconn.listconn) > 1:
    32                 for i in myconn.listconn.keys():
    33                     if self.client_address != i:
    34                         myconn.listconn[i].sendall(data)
    35                 pass
    36             else: ##不再      则发送数据给客户端
    37                 conn.sendall(data)
    38                 pass
    39             conn.sendall(data)
    40 
    41     def finish(self):
    42         del myconn.listconn[self.client_address]
    43         pass
    44     pass
    45 
    46 if __name__ == '__main__':
    47     server = SocketServer.ThreadingTCPServer(('localhost',8022),MyServer)
    48     print 'waiting for connection...'
    49     server.serve_forever()

    客户端代码

     1 # -*- coding:utf-8 -*-
     2 
     3 
     4 from socket import *
     5 import threading
     6 
     7 HOST = 'localhost'  ##
     8 PORT=8022
     9 BUFSIZ = 1024  ##缓冲区大小  1K
    10 ADDR = (HOST,PORT)
    11 
    12 tcpCliSock = socket(AF_INET,SOCK_STREAM)
    13 tcpCliSock.connect(ADDR)
    14 
    15 
    16 class inputdata(threading.Thread):
    17     def run(self):
    18         while True:
    19             data = raw_input('> ')
    20             tcpCliSock.send(data)
    21         pass
    22 
    23 
    24 class getdata(threading.Thread):
    25     def run(self):
    26         while True:
    27             data = tcpCliSock.recv(BUFSIZ)
    28             print data
    29     pass
    30 
    31 
    32 def main():
    33     myinputd = inputdata()
    34     mygetdata = getdata()
    35     myinputd.start()
    36     mygetdata.start()
    37     myinputd.join()
    38     mygetdata.join()
    39 
    40 
    41 if __name__ == '__main__':
    42     main()

    程序需要先运行服务端在运行多个客户端,多个客户端可已进行通讯

  • 相关阅读:
    python-杂烩
    24 Python 对象进阶
    23 Python 面向对象
    22 Python 模块与包
    21 Python 异常处理
    20 Python 常用模块
    18 Python 模块引入
    2 Python 基本语法
    1 Python 环境搭建
    3 Python os 文件和目录
  • 原文地址:https://www.cnblogs.com/seablog/p/7058376.html
Copyright © 2011-2022 走看看