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 相关文章推荐
数据挖掘之Apriori算法详解和Python实现代码分享
Nov 07 Python
python模拟鼠标拖动操作的方法
Mar 11 Python
python BeautifulSoup设置页面编码的方法
Apr 03 Python
从源码解析Python的Flask框架中request对象的用法
Jun 02 Python
Python获取当前页面内所有链接的四种方法对比分析
Aug 19 Python
Python with语句上下文管理器两种实现方法分析
Feb 09 Python
Python 读取指定文件夹下的所有图像方法
Apr 27 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
Nov 15 Python
详解Django+uwsgi+Nginx上线最佳实战
Mar 14 Python
详解使用python绘制混淆矩阵(confusion_matrix)
Jul 14 Python
Python+PyQt5实现灭霸响指功能
May 25 Python
python 模块重载的五种方法
Apr 24 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,ajax实现分页
2008/03/27 PHP
php设计模式 Builder(建造者模式)
2011/06/26 PHP
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
2011/08/02 PHP
php中判断文件存在是用file_exists还是is_file的整理
2012/09/12 PHP
PHP 利用Mail_MimeDecode类提取邮件信息示例
2014/01/26 PHP
PHP生成二维码的两个方法和实例
2014/07/01 PHP
php制作简单模版引擎
2016/04/07 PHP
JavaScript写的一个DIV 弹出网页对话框
2009/08/14 Javascript
Javascript 入门基础学习
2010/03/10 Javascript
麻雀虽小五脏俱全 Dojo自定义控件应用
2010/09/04 Javascript
jQuery教程 $()包装函数来实现数组元素分页效果
2013/08/13 Javascript
js同比例缩放图片的小例子
2013/10/30 Javascript
javascript实现根据身份证号读取相关信息
2014/12/17 Javascript
浅谈js中的引用和复制(传值和传址)
2016/09/18 Javascript
JS实现禁止鼠标右键的功能
2016/10/15 Javascript
AngularJS改变元素显示状态
2017/04/20 Javascript
深入分析element ScrollBar滚动组件源码
2019/01/22 Javascript
解决Vue打包后访问图片/图标不显示的问题
2019/07/25 Javascript
ElementUI之Message功能拓展详解
2019/10/18 Javascript
VUE实现图片验证码功能
2020/11/18 Javascript
vue.js循环radio的实例
2019/11/07 Javascript
Python设计实现的计算器功能完整实例
2017/08/18 Python
使用Python自动生成HTML的方法示例
2019/08/06 Python
Python 取numpy数组的某几行某几列方法
2019/10/24 Python
Python处理PDF与CDF实例
2020/02/26 Python
python中判断文件结束符的具体方法
2020/08/04 Python
python 模拟登陆163邮箱
2020/12/15 Python
一款css实现的鼠标经过按钮的特效
2014/09/11 HTML / CSS
详解CSS中iconfont的使用
2015/08/04 HTML / CSS
美国顶级品牌男士大码服装店:DXL
2017/08/30 全球购物
结婚邀请函范文
2014/01/14 职场文书
一月红领巾广播稿
2014/02/11 职场文书
环保小标语
2014/06/13 职场文书
竞选学委演讲稿
2014/09/13 职场文书
PyQt5 QThread倒计时功能的实现代码
2021/04/02 Python
十大必看国产动漫排名,魁拔上线,第二曾在日本播出
2022/03/18 国漫