python 聊天室

server端程序

 1 # -*- coding: utf-8 -*-
 2 #!/usr/bin/python
 3 """
 4
 5 """
 6 import socket
 7 import sys
 8 import threading
 9
10 con = threading.Condition()
11 HOST = raw_input("input the server‘s ip adrress: ") # Symbolic name meaning all available interfaces
12 PORT = 8888 # Arbitrary non-privileged port
13 data = ‘‘
14
15 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
16 print ‘Socket created‘
17 s.bind((HOST, PORT))
18 s.listen(10)
19 print ‘Socket now listening‘
20
21 #Function for handling connections. This will be used to create threads
22 def clientThreadIn(conn, nick):
23     global data
24 #infinite loop so that function do not terminate and thread do not end.
25     while True:
26     #Receiving from client
27         try:
28             temp = conn.recv(1024)
29             if not temp:
30                 conn.close()
31                 return
32             NotifyAll(temp)
33             print data
34         except:
35             NotifyAll(nick + " leaves the room!")
36             print data
37             return
38
39     #came out of loop
40
41 def NotifyAll(sss):
42     global data
43     if con.acquire():
44         data = sss
45         con.notifyAll()
46         con.release()
47
48 def ClientThreadOut(conn, nick):
49     global data
50     while True:
51         if con.acquire():
52             con.wait()
53             if data:
54                 try:
55                     conn.send(data)
56                     con.release()
57                 except:
58                     con.release()
59                     return
60
61
62 while 1:
63     #wait to accept a connection - blocking call
64     conn, addr = s.accept()
65     print ‘Connected with ‘ + addr[0] + ‘:‘ + str(addr[1])
66     nick = conn.recv(1024)
67      #send only takes string
68     #start new thread takes 1st argument as a function name to be run, second is the tuple of arguments to the function.
69     NotifyAll(‘Welcome ‘ + nick + ‘ to the room!‘)
70     print data
71     print str((threading.activeCount() + 1) / 2) + ‘ person(s)!‘
72     conn.send(data)
73     threading.Thread(target = clientThreadIn , args = (conn, nick)).start()
74     threading.Thread(target = ClientThreadOut , args = (conn, nick)).start()
75
76 s.close()

client端程序

 1 # -*- coding: utf-8 -*-
 2 #/usr/bin/python
 3
 4 """
 5
 6 """
 7
 8 import socket
 9 import threading
10
11
12 inString = ‘‘
13 outString = ‘‘
14 nick = ‘‘
15
16 def DealOut(s):
17     global nick, outString
18     while True:
19         outString = raw_input()
20         outString = nick + ‘: ‘ + outString
21         s.send(outString)
22
23 def DealIn(s):
24     global inString
25     while True:
26         try:
27             inString = s.recv(1024)
28             if not inString:
29                 break
30             if outString != inString:
31                 print inString
32         except:
33             break
34
35
36 nick = raw_input("input your nickname: ")
37 ip = raw_input("input the server‘s ip adrress: ")
38 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
39 sock.connect((ip, 8888))
40 sock.send(nick)
41
42 thin = threading.Thread(target = DealIn, args = (sock,))
43 thin.start()
44 thout = threading.Thread(target = DealOut, args = (sock,))
45 thout.start()

运行结果

1 在服务器端运行程序

2 客户端程序运行结果

客户端运行结果

时间: 2024-10-28 22:07:43

python 聊天室的相关文章

Python聊天室

1.简介 本次项目课是实现简单聊天室程序的服务器端和客户端. 2.知识点 服务器端涉及到asyncore.asynchat和socket这几个模块,客户端用到了telnetlib.wx.time和thread这几个模块. 二.项目实战(服务器端) 1.服务器类 首先需要一个聊天服务器,这里继承asyncore的dispatcher类来实现,代码如下 class ChatServer(dispatcher): """ 聊天服务器 """ def _

Python Socket 编程——聊天室演示样例程序

上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和client的代码了解主要的 Python Socket 编程模型.本文再通过一个样例来加强一下对 Socket 编程的理解. 聊天室程序需求 我们要实现的是简单的聊天室的样例,就是同意多个人同一时候一起聊天.每一个人发送的消息全部人都能接收到,类似于 QQ 群的功能,而不是点对点的 QQ 好友之间的聊天.例如以下图: 图来自:http://www.ibm.com/developerworks/linux/tu

如何用Python编写一个聊天室

一.课程介绍 1.简介 本次项目课是实现简单聊天室程序的服务器端和客户端. 2.知识点 服务器端涉及到asyncore.asynchat和socket这几个模块,客户端用到了telnetlib.wx.time和thread这几个模块. 3.所需环境 本次课中编写客户端需要用到wxPython,它是一个GUI工具包,请先使用下面的命令安装: $ sudo apt-get install python-wxtools 密码为shiyanlou 4.项目效果截图 登录窗口 聊天窗口 5.源代码下载 g

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

原文:Python Socket 编程--聊天室示例程序 上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的理解. 聊天室程序需求 我们要实现的是简单的聊天室的例子,就是允许多个人同时一起聊天,每个人发送的消息所有人都能接收到,类似于 QQ 群的功能,而不是点对点的 QQ 好友之间的聊天.如下图: 图来自:http://www.ibm.com/de

Python实现文字聊天室

你是否想过用所学的Python开发一个图形界面的聊天室程序啊? 像这样的: 如果你想开发这样一个有点怀旧风格的聊天程序,那么可以接着看: 要开发这个聊天程序,你需要具备以下知识点: asyncore .asynchat模块使用 wxPython 图形开发 这个聊天程序的实验原理如下: 由于 Python 是一门带 GIL 的语言,所以在 Python 中使用多线程处理IO操作过多的任务并不是很好的选择.同时聊天服务器将同多个 socket 进行通信,所以我们可以基于 asyncore 模块实现聊

Python实现web聊天室

使用Python模块中的select模块实现web聊天室功能 select模块 Python中的select模块专注于I/O多路复用,提供了select  poll  epoll三个方法(其中后两个在Linux中可用,windows仅支持select),另外也提供了kqueue方法(freeBSD系统) 参数: 可接受四个参数(前三个必须) rlist: wait until ready for reading wlist: wait until ready for writing xlist:

python 入门 socket 实现udp聊天室

什么是 Socket? Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯. socket()函数 Python 中,我们用 socket()函数来创建套接字,语法格式如下: socket.socket([family[, type[, proto]]]) 参数 family: 套接字家族可以使AF_UNIX或者AF_INET type: 套接字类型可以根据是面向连接的还是非连接分为SOCK

python 实现聊天室

所用模块 asyncore 官方介绍, 源码 英文捉鸡点 这里  源码中可以看到其实本质上就对 select 以及 socket 的进一步封装 简单说明 Python的asyncore模块提供了以异步的方式写入套接字服务的客户端和服务器的基础结构. 主要包括 asyncore.loop(…) - 用于循环监听网络事件.loop()函数负责检测一个字典,字典中保存dispatcher的实例. asyncore.dispatcher类 - 一个底层套接字对象的简单封装.这个类有少数由异步循环调用的,

python socket 聊天室

import socket s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #绑定端口 s.bind(("127.0.0.1", 8888)) while True: data = s.recvfrom(1024) print(str(data[0].decode("gbk"))) send_data = input("请输入聊天内容") if "exit" in se