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中的socket模块使用代理实例
May 29 Python
Python程序设计入门(3)数组的使用
Jun 16 Python
python3+PyQt5实现使用剪贴板做复制与粘帖示例
Jan 24 Python
python的staticmethod与classmethod实现实例代码
Feb 11 Python
pycharm设置鼠标悬停查看方法设置
Jul 29 Python
详解Python文件修改的两种方式
Aug 22 Python
如何为Python终端提供持久性历史记录
Sep 03 Python
基于python+selenium的二次封装的实现
Jan 06 Python
基于Django OneToOneField和ForeignKey的区别详解
Mar 30 Python
Keras:Unet网络实现多类语义分割方式
Jun 11 Python
pytorch锁死在dataloader(训练时卡死)
May 28 Python
Matplotlib绘制条形图的方法你知道吗
Mar 21 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 或网站服务器日志,并正确配置 PHP 安装最快的解决办法
2010/08/01 PHP
ThinkPHP实现跨模块调用操作方法概述
2014/06/20 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
Laravel 队列使用的实现
2019/01/08 PHP
Laravel 自带的Auth验证登录方法
2019/09/30 PHP
PHP CURL实现模拟登陆并上传文件操作示例
2020/01/02 PHP
用js实现下载远程文件并保存在本地的脚本
2008/05/06 Javascript
JavaScript中获取未知对象属性的代码
2011/04/27 Javascript
javascript新建标签,判断键盘输入,以及判断焦点(示例代码)
2013/11/25 Javascript
JavaScript实现查找字符串中第一个不重复的字符
2014/12/29 Javascript
JavaScript函数内部属性和函数方法实例详解
2016/03/17 Javascript
jQuery 1.9版本以上的浏览器判断方法代码分享
2017/08/28 jQuery
微信小程序 scroll-view实现锚点滑动的示例
2017/12/06 Javascript
记一次webpack3升级webpack4的踩坑经历
2018/06/12 Javascript
vue 弹框产生的滚动穿透问题的解决
2018/09/21 Javascript
Node.js设置定时任务之node-schedule模块的使用详解
2020/04/28 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
2020/05/09 Javascript
Vue项目利用axios请求接口下载excel
2020/11/17 Vue.js
Django 如何获取前端发送的头文件详解(推荐)
2017/08/15 Python
Python实现的单向循环链表功能示例
2017/11/10 Python
Django中login_required装饰器的深入介绍
2017/11/24 Python
Python实战小程序利用matplotlib模块画图代码分享
2017/12/09 Python
pytorch 数据集图片显示方法
2018/07/26 Python
Python生成MD5值的两种方法实例分析
2019/04/26 Python
Python post请求实现代码实例
2020/02/28 Python
波兰灯具、照明和LED购物网站:Lampy.pl
2019/03/11 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
外语系毕业生找工作的求职信
2013/11/28 职场文书
团工委书记自荐书范文
2013/12/17 职场文书
董事长秘书职责
2014/01/31 职场文书
《小小雨点》教学反思
2014/02/18 职场文书
辅导员评语
2014/05/04 职场文书
本科毕业生自荐信
2014/05/26 职场文书
捐款感谢信
2015/01/20 职场文书
《月球之谜》教学反思
2016/02/20 职场文书
详解在OpenCV中如何使用图像像素
2022/03/03 Python