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编程之黑板上排列组合,你舍得解开吗
Oct 30 Python
Python如何抓取天猫商品详细信息及交易记录
Feb 23 Python
Python3单行定义多个变量或赋值方法
Jul 12 Python
python多进程使用及线程池的使用方法代码详解
Oct 24 Python
Python3使用Matplotlib 绘制精美的数学函数图形
Apr 11 Python
python自动化之Ansible的安装教程
Jun 13 Python
Python实现FM算法解析
Jun 18 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
Aug 23 Python
python3.8下载及安装步骤详解
Jan 15 Python
python 爬取马蜂窝景点翻页文字评论的实现
Jan 20 Python
Python可以用来做什么
Nov 23 Python
Python matplotlib绘制雷达图
Apr 13 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
新版mysql+apache+php Linux安装指南
2006/10/09 PHP
php横向重复区域显示二法
2008/09/25 PHP
php中模拟POST传递数据的两种方法分享
2011/09/16 PHP
PHP遍历数组的三种方法及效率对比分析
2015/02/12 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
2017/03/16 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
实例讲解PHP表单
2020/06/10 PHP
Google AJAX 搜索 API实现代码
2010/11/17 Javascript
node.js中的fs.symlinkSync方法使用说明
2014/12/15 Javascript
Jquery判断radio、selelct、checkbox是否选中及获取选中值方法总结
2015/04/15 Javascript
JavaScript中pop()方法的使用教程
2015/06/09 Javascript
利用jQuery实现CheckBox全选/全不选/反选的简单代码
2016/05/31 Javascript
原生js实现下拉框功能(支持键盘事件)
2017/01/13 Javascript
原生JS和jQuery操作DOM对比总结
2017/01/19 Javascript
svg动画之动态描边效果
2017/02/22 Javascript
vue模块拖拽实现示例代码
2019/03/09 Javascript
Vue实现根据hash高亮选项卡
2019/05/27 Javascript
vue-autoui自匹配webapi的UI控件的实现
2020/03/20 Javascript
openlayers实现地图弹窗
2020/09/25 Javascript
python下函数参数的传递(参数带星号的说明)
2010/09/19 Python
Python实现的HMacMD5加密算法示例
2018/04/03 Python
对python条件表达式的四种实现方法小结
2019/01/30 Python
keras获得某一层或者某层权重的输出实例
2020/01/24 Python
广播电视新闻学专业应届生求职信
2013/10/08 职场文书
车工岗位职责
2013/11/26 职场文书
优秀大学生推荐信范文
2013/11/28 职场文书
《盘古开天地》教学反思
2014/02/28 职场文书
中国梦我的梦演讲稿
2014/04/23 职场文书
2014年度党员自我评议
2014/09/13 职场文书
教师政风行风评议心得体会
2014/10/21 职场文书
企业介绍信范文
2015/01/30 职场文书
2015年销售部工作总结范文
2015/04/27 职场文书
新郎婚礼致辞
2015/07/27 职场文书
《乌鸦喝水》教学反思
2016/02/19 职场文书
mysql外连接与内连接查询的不同之处
2021/06/03 MySQL
JMeter对MySQL数据库进行压力测试的实现步骤
2022/01/22 MySQL