python-fork聊天室
服务端
#!/usr/bin/python from socket import *
import sys
import os class Node(object):
def __init__(self,val,next = None):
self.val = val
self.next = next def do_login(s,H,msg,clientaddr):
msg = msg.split(' ')
msg[2] = '%s login....'%msg[1] p = Node(clientaddr)
q = H.next while q != None:
s.sendto(msg[2],q.val)
q = q.next p.next = H.next
H.next = p return def do_quit(s,H,msg,clientaddr):
msg = "%s log out..."%msg.split(' ')[1] p = H while p.next != None:
if p.next.val != clientaddr:
s.sendto(msg,p.next.val)
p = p.next else:
q = p.next
p.next = q.next return def do_chat(s,H,msg,clientaddr):
p = H.next
buf = "%s say %s"%(msg.split(' ')[1],msg.split(' ')[2]) while p != None:
if p.val != clientaddr:
s.sendto(buf,p.val)
p = p.next return def do_parent(s,addr):
#msg = type + name + text
msg = "B server " while True:
print "system message >>"
text = sys.stdin.readline()
msg = msg + text
s.sendto(msg,addr)
s.close() def do_child(s):
H = Node(None) while True:
msg,clientaddr = s.recvfrom(4096)
tmp = msg.split(' ') if tmp[0] == 'L':
do_login(s,H,msg,clientaddr)
if tmp[0] == 'B':
do_chat(s,H,msg,clientaddr)
if tmp[0] == 'Q':
do_quit(s,H,msg,clientaddr) return def main():
HOST = sys.argv[1]
PORT = int(sys.argv[2])
ADDR = (HOST,PORT) s = socket(AF_INET,SOCK_DGRAM,0)
s.bind(ADDR) pid = os.fork() if pid < 0:
print "fail to create process"
return
elif pid == 0:
do_child(s)
else:
do_parent(s,ADDR) if __name__ == "__main__":
main()
#客户端
#!/usr/bin/python from socket import *
import sys
from signal import *
import os def do_child(s,addr,msg):
name = msg.split(' ')[1]
while True:
text = raw_input(">>") if text == 'quit':
msg = 'Q ' + name
s.sendto(msg,addr)
os.kill(os.getppid(),SIGKILL)
exit()
else:
msg = 'B %s %s'%(name,text)
s.sendto(msg,addr)
return def do_parent(s):
while True:
msg,addr = s.recvfrom(2048)
print msg def main():
HOST = sys.argv[1]
PORT = int(sys.argv[2])
ADDR = (HOST,PORT) s = socket(AF_INET,SOCK_DGRAM,0) name = raw_input("please input your name>>") msg = 'L %s '%name s.sendto(msg,ADDR) pid = os.fork() if pid < 0:
print "fail to create process"
return
elif pid == 0:
do_child(s,ADDR,msg)
else:
do_parent(s) if __name__ == "__main__":
main()
python-fork聊天室的更多相关文章
- python socket 聊天室
socket 发送的时候,使用的是全双工的形式,不是半双工的形式.全双工就是类似于电话,可以一直通信.并且,在发送后,如果又接受数据,那么在这个接受到数据之前,整个过程是不会停止的.会进行堵塞,堵塞就 ...
- python 实现聊天室
所用模块 asyncore 官方介绍, 源码 英文捉鸡点 这里 源码中可以看到其实本质上就对 select 以及 socket 的进一步封装 简单说明 Python的asyncore模块提供了以异步 ...
- Python socket聊天室程序
http://blog.csdn.net/calling_wisdom/article/details/42524745 今天用python的socket模块实现了一个聊天室的程序 虽然功能比较简单, ...
- Python 简单聊天室
#coding=utf-8 from socket import * from threading import Thread import time udpSocket = socket(AF_IN ...
- 基于select的python聊天室程序
python网络编程具体参考<python select网络编程详细介绍>. 在python中,select函数是一个对底层操作系统的直接访问的接口.它用来监控sockets.files和 ...
- Python Socket 编程——聊天室示例程序
上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...
- Python聊天室
小编心语:锵锵锵!各位看官注意了啊,走过路过表错过!上篇博文主要介绍了基于基于Server-Sent Event的简单在线聊天室,相信不管各位是大牛.小牛还是跟小编一样的小白,可能觉得看得不够过瘾,区 ...
- python tornado websocket 多聊天室(返回消息给部分连接者)
python tornado 构建多个聊天室, 多个聊天室之间相互独立, 实现服务器端将消息返回给相应的部分客户端! chatHome.py // 服务器端, 渲染主页 --> 聊天室建立web ...
- 小小聊天室 Python实现
相对于Java方式的聊天室,Python同样可以做得到.而且可以做的更加的优雅.想必少了那么多的各种流的Python Socket,你一定会喜欢的. 至于知识点相关的内容,这里就不多说了. UDP方式 ...
- 如何用Python编写一个聊天室
一.课程介绍 1.简介 本次项目课是实现简单聊天室程序的服务器端和客户端. 2.知识点 服务器端涉及到asyncore.asynchat和socket这几个模块,客户端用到了telnetlib.wx. ...
随机推荐
- HRBUST1213 单词接龙 2017-03-06 15:53 67人阅读 评论(0) 收藏
单词接龙 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙&quo ...
- MYC编译器源码分析之程序入口
前文.NET框架源码解读之MYC编译器讲了MyC编译器的架构,整个编译器是用C#语言写的,上图列出了MyC编译器编译一个C源文件的过程,编译主路径如下: 首先是入口Main函数用来解析命令行参数,读取 ...
- 常用脚本--归档ERRORLOG
SQL Server error log 7组日志文件默认情况下不会自动切换到下一个文件, 一般在SQL Server 重新启动后才会切换error log,如果SQL Server长期未重启或因为 ...
- zookeeper的主要应用
master选举 数据发布和订阅 负载均衡
- angular 响应式表单指令
响应式表单都是以 form开头的指令 第一列指令(不以name结尾)在html模版中,用 [ ] 第二列指令(以name结尾)在html模版中,不用 [ ]
- 如何让你的项目同时支持go vendor和go module
目录 如何让你的项目同时支持go vendor和go module 1. go module简介 2. 使用go mod命令管理项目 2.1 初始化环境 2.2 构建 3. 保持兼容性 4. 使用go ...
- util.Date转化成sql.date格式
https://www.cnblogs.com/zhaotiancheng/p/6413067.html
- Java50道经典习题-程序8 输入数字求和
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字.例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制. 分析:关键是计算出每一项的值. i ...
- WORD wFormatTag; /* format type */ //设置波形声音的格式
0x0000 Microsoft Unknown Wave Format 0x0001 Microsoft PCM Format 0x0002 ...
- 报错:'utf-8' codec can't decode byte 0xb0 in position 0: invalid start byte
pandas的read_csv读取一个csv表格,报错. 解决方法:用editplus打开表格,改变编码格式为utf-8,保存,重新读取,通过.