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中使用装饰器和元编程实现结构体类实例
Jan 28 Python
TensorFlow的权值更新方法
Jun 14 Python
python实现排序算法解析
Sep 08 Python
Python实现图片转字符画的代码实例
Feb 22 Python
python简单验证码识别的实现方法
May 10 Python
Python timer定时器两种常用方法解析
Jan 20 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
Feb 03 Python
Django User 模块之 AbstractUser 扩展详解
Mar 11 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
Apr 13 Python
python numpy库np.percentile用法说明
Jun 08 Python
Pycharm添加虚拟解释器报错问题解决方案
Oct 13 Python
利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境
Nov 01 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正确输出json数据的实例讲解
2018/08/21 PHP
extjs DataReader、JsonReader、XmlReader的构造方法
2009/11/07 Javascript
js 小数取整的函数
2010/05/10 Javascript
Javascript 面向对象 继承
2010/05/13 Javascript
Javascript 类型转换方法
2010/10/24 Javascript
关于IE中getElementsByClassName不能用的问题解决方法
2013/08/26 Javascript
理解Javascript闭包
2013/11/01 Javascript
javascript生成随机颜色示例代码
2014/05/05 Javascript
浅谈jQuery中对象遍历.eq().first().last().slice()方法
2014/11/26 Javascript
举例讲解Node.js中的Writable对象
2015/07/29 Javascript
jquery实现界面无刷新加载登陆注册
2016/07/30 Javascript
nodejs中向HTTP响应传送进程的输出
2017/03/19 NodeJs
详解Vue.js基于$.ajax获取数据并与组件的data绑定
2017/05/26 Javascript
使用node打造自己的命令行工具方法教程
2018/03/26 Javascript
原生js代码能实现call和bind吗
2019/07/31 Javascript
vue 集成jTopo 处理方法
2019/08/07 Javascript
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
python原始套接字编程示例分享
2014/02/21 Python
Pthon批量处理将pdb文件生成dssp文件
2015/06/21 Python
浅谈python中的变量默认是什么类型
2016/09/11 Python
Python实现单词翻译功能
2017/06/06 Python
Python3导入CSV文件的实例(跟Python2有些许的不同)
2018/06/22 Python
使用memory_profiler监测python代码运行时内存消耗方法
2018/12/03 Python
python删除列表元素的三种方法(remove,pop,del)
2019/07/22 Python
基于Python爬取素材网站音频文件
2020/10/21 Python
利用CSS3的特性改变文本选中时的颜色
2013/09/11 HTML / CSS
台湾深度自由行旅游平台:Tripbaa趣吧
2017/10/10 全球购物
Carter’s OshKosh加拿大:购买婴幼儿服装和童装
2018/11/27 全球购物
日常奢侈品,轻松购物:Verishop
2019/08/20 全球购物
师范教师大学生职业生涯规划范文
2014/01/05 职场文书
大学同学聚会邀请函
2014/01/19 职场文书
普通党员个人剖析材料
2014/10/08 职场文书
原告代理词范文
2015/05/25 职场文书
国王的演讲观后感
2015/06/03 职场文书
java泛型通配符详解
2021/07/25 Java/Android
Python+DeOldify实现老照片上色功能
2022/06/21 Python