python实现文本界面网络聊天室


Posted in Python onDecember 12, 2018

Hello大家好,今天说一下python的socket编程,基于python的socket通信的文本框网络聊天

首先,实验环境:

一个云服务器(我们这里是用的阿里云,大家将就自己的条件吧);

类Unix操作系统(如Mac OS,Linux等);

Windows系列操作系统。

在这里,我使用的是阿里云,Mac OSX,Windows XP(在mac上的一个虚拟机)。

Server.py

# -*- coding: utf-8 -*-
#!/usr/local/bin/python
 
import socket
import sys
import threading
 
con = threading.Condition()
HOST = "云空间的IP地址"
PORT = 端口 
data = ''
 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created'
s.bind((HOST, PORT))
s.listen(10)
print 'Socket now listening'
 
def clientThreadIn(conn, nick):#开辟线程
  global data
  while True:#接受客户端数据
    try:
      temp = conn.recv(1024)
      if not temp:
        conn.close()#连接关闭
        return
      NotifyAll(temp)
      print data
    except:
      NotifyAll(nick + " leaves the room!")
      print data
      return
 
 
def NotifyAll(sss):#广播
  global data
  if con.acquire():
    data = sss
    con.notifyAll()
    con.release()
 
def ClientThreadOut(conn, nick):#客户端输出
  global data
  while True:
    if con.acquire():
      con.wait()
      if data:
        try:
          conn.send(data)
          con.release()
        except:
          con.release()
          return
          
 
while 1:
  conn, addr = s.accept()
  print 'Connected with ' + addr[0] + ':' + str(addr[1])
  nick = conn.recv(1024)
  NotifyAll('Welcome ' + nick + ' to the room!')
  print data
  print str((threading.activeCount() + 1) / 2) + ' person(s)!'
  conn.send(data)
  threading.Thread(target = clientThreadIn , args = (conn, nick)).start()#开辟线程
  threading.Thread(target = ClientThreadOut , args = (conn, nick)).start()
 
s.close()

Client.py

# -*- coding: utf-8 -*-
 
import socket
import threading
import getpass
 
inString = ''
outString = ''
nick = ''
 
def DealOut(s):
  computername=socket.gethostname()#获取计算机名
  global nick, outString
  while True:
    outString = raw_input(nick+":")
    outString = nick + "@" + computername + ': ' + outString
    s.send(outString)
 
def DealIn(s):
  global inString
  while True:
    try:
      inString = s.recv(1024)
      if not inString:
        break
      if outString != inString:
        print inString
    except:
      break
    
 
nick = getpass.getuser()#获取操作系统用户名
ip = "云空间IP地址"
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((ip, 端口))
sock.send(nick)
 
thin = threading.Thread(target = DealIn, args = (sock,))#开辟一个读入的线程
thin.start()
thout = threading.Thread(target = DealOut, args = (sock,))#开辟一个写出的线程
thout.start()

将server.py上传云端,运行,如图:

python实现文本界面网络聊天室

将client.py在mac系统上运行,如图:

python实现文本界面网络聊天室

将client.py在WindowsXP虚拟机上运行,如图:

python实现文本界面网络聊天室

OK,这就可以了,一个基于python的socket通信的文本框网络聊天室就写好了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python通过floor函数舍弃小数位的方法
Mar 17 Python
python实现同时给多个变量赋值的方法
Apr 30 Python
使用Python搭建虚拟环境的配置方法
Feb 28 Python
pyqt5 键盘监听按下enter 就登陆的实例
Jun 25 Python
从列表或字典创建Pandas的DataFrame对象的方法
Jul 06 Python
react+django清除浏览器缓存的几种方法小结
Jul 17 Python
Python Django 添加首页尾页上一页下一页代码实例
Aug 21 Python
python程序 线程队列queue使用方法解析
Sep 23 Python
Python实现CNN的多通道输入实例
Jan 17 Python
Django ORM实现按天获取数据去重求和例子
May 18 Python
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
May 27 Python
python和anaconda的区别
May 06 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
Dec 12 #Python
python实现简单多人聊天室
Dec 11 #Python
在python中利用KNN实现对iris进行分类的方法
Dec 11 #Python
python 划分数据集为训练集和测试集的方法
Dec 11 #Python
Python sklearn KFold 生成交叉验证数据集的方法
Dec 11 #Python
想学python 这5本书籍你必看!
Dec 11 #Python
对python中数据集划分函数StratifiedShuffleSplit的使用详解
Dec 11 #Python
You might like
解析PHP中$_FILES的使用以及注意事项
2013/07/05 PHP
解析php开发中的中文编码问题
2013/08/08 PHP
is_uploaded_file函数引发的不能上传文件问题
2013/10/29 PHP
PHP页面跳转实现延时跳转的方法
2016/12/10 PHP
JavaScript 对象模型 执行模型
2009/12/06 Javascript
jQuery 关于伪类选择符的使用说明
2013/04/24 Javascript
Javascript倒计时页面跳转实例小结
2013/09/11 Javascript
jquery遍历select元素(实例讲解)
2013/12/31 Javascript
Jquery实现自定义弹窗示例
2014/03/12 Javascript
JavaScript中的Web worker多线程API研究
2014/12/06 Javascript
javascript实现避免页面按钮重复提交
2015/01/08 Javascript
基于JQuery实现仿网易邮箱全屏动感滚动插件fullPage
2015/09/20 Javascript
深入理解JS正则表达式---分组
2016/07/18 Javascript
利用JS实现简单的日期选择插件
2017/01/23 Javascript
浅析node应用的timing-attack安全漏洞
2018/02/28 Javascript
浅谈vue.js导入css库(elementUi)的方法
2018/03/09 Javascript
详解微信小程序实现跑马灯效果(附完整代码)
2019/04/29 Javascript
[01:45]绝对公平!DOTA2队长征召模式详解
2014/04/25 DOTA
python k-近邻算法实例分享
2014/06/11 Python
基于Python如何使用AIML搭建聊天机器人
2016/01/27 Python
bpython 功能强大的Python shell
2016/02/16 Python
widows下安装pycurl并利用pycurl请求https地址的方法
2018/10/15 Python
Python实现常见的回文字符串算法
2018/11/14 Python
python使用MQTT给硬件传输图片的实现方法
2019/05/05 Python
python+numpy实现的基本矩阵操作示例
2019/07/19 Python
Django 限制访问频率的思路详解
2019/12/24 Python
Python xlrd excel文件操作代码实例
2020/03/10 Python
python模块内置属性概念及实例
2021/02/18 Python
购买一个高级域名:BuyDomains
2018/03/11 全球购物
Richards网上商店:当代时尚,遍布巴西
2019/11/03 全球购物
群众路线党课主持词
2014/04/01 职场文书
小学德育工作经验交流材料
2014/05/22 职场文书
群众路线个人剖析材料及整改措施
2014/11/04 职场文书
2016暑期社会实践心得体会范文
2016/01/14 职场文书
Java实现简易的分词器功能
2021/06/15 Java/Android
Python学习之时间包使用教程详解
2022/03/21 Python