服务端
#!/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聊天室的更多相关文章

  1. python socket 聊天室

    socket 发送的时候,使用的是全双工的形式,不是半双工的形式.全双工就是类似于电话,可以一直通信.并且,在发送后,如果又接受数据,那么在这个接受到数据之前,整个过程是不会停止的.会进行堵塞,堵塞就 ...

  2. python 实现聊天室

    所用模块 asyncore 官方介绍, 源码 英文捉鸡点 这里  源码中可以看到其实本质上就对 select 以及 socket 的进一步封装 简单说明 Python的asyncore模块提供了以异步 ...

  3. Python socket聊天室程序

    http://blog.csdn.net/calling_wisdom/article/details/42524745 今天用python的socket模块实现了一个聊天室的程序 虽然功能比较简单, ...

  4. Python 简单聊天室

    #coding=utf-8 from socket import * from threading import Thread import time udpSocket = socket(AF_IN ...

  5. 基于select的python聊天室程序

    python网络编程具体参考<python select网络编程详细介绍>. 在python中,select函数是一个对底层操作系统的直接访问的接口.它用来监控sockets.files和 ...

  6. Python Socket 编程——聊天室示例程序

    上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...

  7. Python聊天室

    小编心语:锵锵锵!各位看官注意了啊,走过路过表错过!上篇博文主要介绍了基于基于Server-Sent Event的简单在线聊天室,相信不管各位是大牛.小牛还是跟小编一样的小白,可能觉得看得不够过瘾,区 ...

  8. python tornado websocket 多聊天室(返回消息给部分连接者)

    python tornado 构建多个聊天室, 多个聊天室之间相互独立, 实现服务器端将消息返回给相应的部分客户端! chatHome.py // 服务器端, 渲染主页 --> 聊天室建立web ...

  9. 小小聊天室 Python实现

    相对于Java方式的聊天室,Python同样可以做得到.而且可以做的更加的优雅.想必少了那么多的各种流的Python Socket,你一定会喜欢的. 至于知识点相关的内容,这里就不多说了. UDP方式 ...

  10. 如何用Python编写一个聊天室

    一.课程介绍 1.简介 本次项目课是实现简单聊天室程序的服务器端和客户端. 2.知识点 服务器端涉及到asyncore.asynchat和socket这几个模块,客户端用到了telnetlib.wx. ...

随机推荐

  1. postman的使用方法详解!最全面的教程

      文章来源:http://www.cnplugins.com/tool/specify-postman-methods.html     一 简介 Postman 是一款功能超级强大的用于发送 HT ...

  2. [Erlang32]ibrowse流程及性能测试

    1.简介 ibrowse是用erlang写的一个HTTP client.github地址:https://github.com/cmullaparthi/ibrowse 使用方法见项目的readme. ...

  3. .Net面试经验,从北京到杭州

    首先简单说下,本人小本,目前大四软件工程专业,大三阴差阳错地选了.Net方向,也是从大三开始接触.Net.自认为在学生中.net基础还可以,嘿嘿,吹一下. 大四第一学期学校安排去北京培训,培训了两个月 ...

  4. PDF文档转换为图片、图片转成PDF 及PDF合并

    简介 功能:PDF文档按每页转换成一张图片,一张图片转换成一张PDF 并将多张PDF合成一个多页的PDF文档. 经历:在各个网站上搜索始终出现各种问题,尤其是遇到引用的版本问题尤其头疼,不是不能适用当 ...

  5. C#基础笔记(第十九天)

    1.CSS 层叠样式表 对HTML的补充实现网页内容和页面效果的彻底分离1.内联样式表(在标签内设置元素的样式)<p style="background:red; font-size: ...

  6. xml和JSON格式相互转换的Java实现

    依赖的包: json-lib-2.4-jdk15.jar ezmorph-1.0.6.jar xom-1.2.1.jar commons-lang-2.1.jar commons-io-1.3.2.j ...

  7. codeforces 1093 题解

    12.18 update:补充了 $ F $ 题的题解 A 题: 题目保证一定有解,就可以考虑用 $ 2 $ 和 $ 3 $ 来凑出这个数 $ n $ 如果 $ n $ 是偶数,我们用 $ n / 2 ...

  8. 3D-2D:PnP

    PnP(Perspective-n-Point):当知道n个3D空间点及其投影位置时,估计相机位姿. 2D-2D的对极几何方法需要八个或八个以上的点对(以八点法为例),且存在着初始化.纯旋转和尺度的问 ...

  9. Linux磁盘及文件系统(三)Linux文件系统

    一.文件系统的组成 Linux常见的文件系统类型有ReiserFS,ext2,ext3,ext4,vfat,XFS等,文件系统是对一个存储设备上数据和元数据进行组织的机制.他的最终目的是把大量数据有组 ...

  10. springboot多数据源动态切换和自定义mybatis分页插件

    1.配置多数据源 增加druid依赖 完整pom文件 数据源配置文件 route.datasource.driver-class-name= com.mysql.jdbc.Driver route.d ...