服务端
#!/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. Git Note - git tag

    git tag is used to create labels, usually for version numbers. Format: git tag <TagName> <r ...

  2. ubuntu16.04系统精简

    ubuntu16.04系统精简 一.更新系统 apt-get update apt-get dist-upgrade 二.查看所有内核 sudo dpkg --get-selections |grep ...

  3. Javascript设计模式理论与实战:工厂方法模式

    本文从简单工厂模式的缺点说起,引入工厂方法模式,介绍的工厂方法模式的基本知识,实现要点和应用场景,最后举例进行说明工厂方法模式的应用.在之前的<Javascript设计模式理论与实战:简单工厂模 ...

  4. asp.net mvc5 下载文件方法

    控制器自带的 FileContentResult 可以让我们很方便的返回文件到服务端,减少了很多步骤.用于下载文件的时候,像视频.文本.图片这种浏览器支持的文件,默认就会被浏览器打开.这时候想让它变成 ...

  5. (zxing.net)二维码PDF417的简介、实现与解码

    一.简介 二维码PDF417是一种堆叠式二维条码.PDF417条码是由美国SYMBOL公司发明的,PDF(Portable Data File)意思是“便携数据文件”.组成条码的每一个条码字符由4个条 ...

  6. 开源应用框架BitAdminCore:更新日志20180605

    索引 NET Core应用框架之BitAdminCore框架应用篇系列 框架演示:http://bit.bitdao.cn 框架源码:https://github.com/chenyinxin/coo ...

  7. 限制html文本框input只能输入数字和小数点

    代码: <input type="text" class="txt" name="qty" value="" on ...

  8. C# winform中listview排序

    本文解决方案是采用下面链接中的解决方案.十分感谢这篇文章的作者bright:http://blog.163.com/shensc@126/blog/static/1312896522010614103 ...

  9. 如何让Syncthing始终使用同一个设备ID?

    设备ID(device id)是Syncthing最重要的参数之一,所有节点的发现.连接等操作,全部是基于这个设备ID!对于已经建立起来的P2P网络,保持重要节点的设备ID唯一性是非常重要的!!!!那 ...

  10. 【Oracle 12c】最新CUUG OCP-071考试题库(60题)

    60.(16-10) choose the best answer: Evaluate the following SQL commands: SQL>CREATE SEQUENCE ord_s ...