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结合opencv实现人脸检测与跟踪
Jun 08 Python
Python实现批量转换文件编码的方法
Jul 28 Python
Django中使用第三方登录的示例代码
Aug 20 Python
Python实现Dijkstra算法
Oct 17 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
Aug 12 Python
tensorflow模型继续训练 fineturn实例
Jan 21 Python
tensorboard显示空白的解决
Feb 15 Python
Django在Model保存前记录日志实例
May 14 Python
Python网络爬虫四大选择器用法原理总结
Jun 01 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
Jun 04 Python
什么是python的函数体
Jun 19 Python
python判断一个变量是否已经设置的方法
Aug 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
解析curl提交GET,POST,Cookie的简单方法
2013/06/29 PHP
php 利用socket发送HTTP请求(GET,POST)
2015/08/24 PHP
php中目录操作opendir()、readdir()及scandir()用法示例
2019/06/08 PHP
特殊字符、常规符号及其代码对照表
2006/06/26 Javascript
模仿JQuery sortable效果 代码有错但值得看看
2009/11/05 Javascript
Ajax执行顺序流程及回调问题分析
2012/12/10 Javascript
js有序数组的连接问题
2013/10/01 Javascript
使用JS CSS去除IE链接虚线框的三种方法
2013/11/14 Javascript
js类定义函数时用prototype与不用的区别示例介绍
2014/06/10 Javascript
JavaScript实现按Ctrl键打开新页面
2014/09/04 Javascript
jQuery在ul中显示某个li索引号的方法
2015/03/17 Javascript
解析AngularJS中get请求URL出现的跨域问题
2016/12/01 Javascript
QRCode.js:基于JQuery的生成二维码JS库的使用
2017/06/23 jQuery
bootstrap基本配置_动力节点Java学院整理
2017/07/14 Javascript
微信小程序使用image组件显示图片的方法【附源码下载】
2017/12/08 Javascript
详解PHP后期静态绑定分析与应用
2018/03/21 Javascript
vue-cli开发环境实现跨域请求的方法
2018/04/07 Javascript
vue中如何让子组件修改父组件数据
2018/06/14 Javascript
JavaScript canvas基于数组生成柱状图代码实例
2020/03/06 Javascript
VSCode Vue开发推荐插件和VSCode快捷键(小结)
2020/08/08 Javascript
使用Python的Flask框架来搭建第一个Web应用程序
2016/06/04 Python
Python3 replace()函数使用方法
2018/03/19 Python
python给图像加上mask,并提取mask区域实例
2020/01/19 Python
在Django中预防CSRF攻击的操作
2020/03/13 Python
Python enumerate() 函数如何实现索引功能
2020/06/29 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
2020/08/07 Python
利用CSS3的transition属性实现滑动效果
2015/08/05 HTML / CSS
Stubhub英国:购买体育、演唱会和剧院门票
2018/06/10 全球购物
党的群众路线对照检查材料
2014/09/22 职场文书
学生实习证明模板汇总
2014/09/25 职场文书
布达拉宫导游词
2015/02/02 职场文书
团员个人总结
2015/02/26 职场文书
二胎满月酒致辞
2015/07/29 职场文书
《田忌赛马》教学反思
2016/02/19 职场文书
如何用JavaScript学习算法复杂度
2021/04/30 Javascript
python 镜像环境搭建总结
2022/09/23 Python