多用户全双工聊天。,多用户全双工聊天,cs.py#!/usr/
多用户全双工聊天。,多用户全双工聊天,cs.py#!/usr/
cs.py
#!/usr/bin/env pythonfrom socket import *from time import ctimeimport threadingHOST = ''PORT = 21567BUFSIZE = 1024ADDR = (HOST, PORT)def Deal(sck, username): while True: data = sck.recv(BUFSIZE) if data == "quit": del clients[username] sck.send(data) sck.close() break for i in clients.iterkeys(): if i <> username: clients[i].send("[%s] %s: %s" %(ctime(), username, data))chatSerSock = socket(AF_INET, SOCK_STREAM)chatSerSock.bind(ADDR)chatSerSock.listen(5)clients = {}while True: print 'waiting for connection...' chatCliSock, addr = chatSerSock.accept() print "...connected romt: ", addr username = chatCliSock.recv(BUFSIZE) print username if clients.has_key(username): chatCliSock.send("reuse") chatCliSock.close() else: chatCliSock.send("success") clients[username] = chatCliSock t = threading.Thread(target=Deal, args=(chatCliSock, username)) t.start()chatSerSock.close()
cc.py
#!/usr/bin/env python# _*_ coding: utf8 _*_from socket import *from time import ctimeimport threadingimport randomfrom sys import argv, exit, stdoutfrom getopt import gnu_getopt, GetoptErrorhelp_info = ["cs.py [ -h | --help | -u | --username] username", "\t-h or --help\t显示帮助信息", "\t-u or --username\指定用户名"]def help(): for i in help_info: print idef Send(sck, test): while True: data = raw_input('>') sck.send(data) if data == "quit": breakdef Recieve(sck, test): while True: data = sck.recv(BUFSIZ) if data == "quit": sck.close() break str = "\n" + data + "\n>" stdout.write(str)HOST = 'localhost'PORT= 21567BUFSIZ = 1024ADDR = (HOST, PORT)threads = []if __name__ == "__main__": # 解析命令行参数 try: opts, args = gnu_getopt(argv[1:], "hu:", ["help", "username="]) except GetoptError, err: print str(err) help() exit(2) username = "" for o, a in opts: if o in ("-h", "--help"): help() exit(0) elif o in ("-u", "--username"): username = a else: print "未知选项" help() exit(2) if username == "": help() exit(2) chatCliSock = socket(AF_INET, SOCK_STREAM) chatCliSock.connect(ADDR) chatCliSock.send(username) data = chatCliSock.recv(BUFSIZ) if data == "reuse": print "用户%s已登录" %(username) raw_input() exit(1) elif data == "success": print "用户%s成功登录" %(username) t = threading.Thread(target=Send, args = (chatCliSock, None)) threads.append(t) t = threading.Thread(target=Recieve, args = (chatCliSock, None)) threads.append(t) for i in range(len(threads)): threads[i].start() threads[0].join()
相关内容
- 你还在为选她还是她而纠结吗?我有办法!,还在纠结
- 一个有趣的罪犯与盒子的问题,罪犯盒子,[Python]代码
- 使MySQLdb的SQL查询中支持?以及:xxx的查询方式,mysqldb查询
- 3行Python代码解简单的一元一次方程,3行python,[Python]代
- python删除文件及文件夹,python删除文件,import os#删除
- 批量下载图片 - Python,,#!/usr/bin/e
- 自动下载并更新壁纸(Linux可用),更新壁纸linux可用,代码
- 调用 MySQL 存储过程并获得返回值,mysql存储过程,try:
- PyQt写的浏览单web页面的browser,pyqtbrowser,程序代码#!/u
- tornado 用上装饰器路由,tornado路由,base.py 这个是改
评论关闭