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. ...
随机推荐
- Tomcat 系统架构与设计模式2
门面设计模式 门面设计模式在 Tomcat 中有多处使用,在 Request 和 Response 对象封装中.Standard Wrapper 到 ServletConfig 封装中.Applica ...
- API接口文档范例
- html中文字溢出处理(text-overflow)
文字溢出处理有两种方式: 一.css overflow:hidden; white-space: nowrap; text-overflow: ellips ...
- wireshark 1.10.0 编译 及 协议解析部分的一些变化
wireshark不久前升级到1.10.0稳定版,这个版本正如其版本号一样,相比1.8.x有较大变化. 我们先说说在windows下编译的问题,1.8.4/1.8.6版本的编译见我的文章:http:/ ...
- Dubbo 自定义异常,你是怎么处理的?
前言 记录Dubbo对于自定义异常的处理方式. 实现目标 服务层异常,直接向上层抛出,web层统一捕获处理 如果是系统自定义异常,则返回{"code":xxx,"msg& ...
- clang命令理解程序
Xcode 创建一个mac OS command Line Tool程序 步骤打开终端 cd + 工程路径(绝对路径)(注:拖拽main.m文件到终端) input —preprocessor— ...
- Python中复制、深拷贝和浅拷贝的区别
深拷贝定义(deepcopy) 在Python中,由于一切皆对象,所以任何变量都可以被引用,也即可以被赋值给任何变量.但是在Python中,给变量赋值,是区分的,一般情况下,Python中的变量赋值都 ...
- Asp.net的生命周期应用之IHttpHandler
摘自:http://www.cnblogs.com/JimmyZhang/archive/2007/09/15/894124.html Framework提供了一系列的接口和类,允许你对于Http请求 ...
- 关于在JS中AJAX导致跨域问题的解决
在部署一个原声的前端项目的时候,请求该服务器后端接口时发现出现了CORS跨域的问题,但是服务端已经做了同源策略的兼容,常见问题,遂记录. 报错信息: XMLHttpRequest cannot loa ...
- 如何在ASP.NET Core 2.0中使用Razor页面
如何在ASP.NET Core 2.0中使用Razor页面 DotNetCore2017-11-22 14:49 问题 如何在ASP.NET Core 2.0中使用Razor页面 解 创建一个空的项 ...