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编写批量卸载手机中安装的android应用脚本
Jul 21 Python
深入探究Python中变量的拷贝和作用域问题
May 05 Python
python学习之面向对象【入门初级篇】
Jan 21 Python
详解 Python 读写XML文件的实例
Aug 02 Python
Python面向对象之类的封装操作示例
Jun 08 Python
django框架实现模板中获取request 的各种信息示例
Jul 01 Python
Python实现图像去噪方式(中值去噪和均值去噪)
Dec 18 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
Dec 25 Python
pytorch 批次遍历数据集打印数据的例子
Dec 30 Python
keras 多gpu并行运行案例
Jun 10 Python
Python使用eval函数执行动态标表达式过程详解
Oct 17 Python
python中time、datetime模块的使用
Dec 14 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和数据库结合的一个简单的web实例 代码分析 (php初学者)
2011/07/28 PHP
php Session存储到Redis的方法
2013/11/04 PHP
php查询相似度最高的字符串的方法
2015/03/12 PHP
php pdo oracle中文乱码的快速解决方法
2016/05/16 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
2016/12/05 PHP
Yii2下session跨域名共存的解决方案
2017/02/04 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
2018/10/14 PHP
PHP如何通过表单直接提交大文件详解
2019/01/08 PHP
event.srcElement+表格应用
2006/08/29 Javascript
Javscript调用iframe框架页面中函数的方法
2014/11/01 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
JavaScript原生对象之String对象的属性和方法详解
2015/03/13 Javascript
JavaScript基础——使用Canvas绘图
2016/11/02 Javascript
form+iframe解决跨域上传文件的方法
2016/11/18 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
2017/10/25 Javascript
vue 挂载路由到头部导航的方法
2017/11/13 Javascript
Pyramid Mako模板引入helper对象的步骤方法
2013/11/27 Python
python正则表达式re模块详解
2014/06/25 Python
Python实现的tab文件操作类分享
2014/11/20 Python
基于Python的文件类型和字符串详解
2017/12/21 Python
python操作小程序云数据库实现简单的增删改查功能
2019/06/06 Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
2019/08/09 Python
Python Django 添加首页尾页上一页下一页代码实例
2019/08/21 Python
Django框架序列化与反序列化操作详解
2019/11/01 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
2020/03/06 Python
Scrapy实现模拟登录的示例代码
2021/02/21 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
Melissa鞋马来西亚官方网站:MDreams马来西亚
2018/04/05 全球购物
转预备党员政审材料
2014/02/06 职场文书
小学运动会入场式解说词
2014/02/18 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/10/28 职场文书
经理岗位职责范本
2015/04/15 职场文书
幼儿园小班班务总结
2015/08/03 职场文书
车辆挂靠协议书
2016/03/23 职场文书
微信小程序实现录音Record功能
2021/05/09 Javascript
Win10/Win11 任务栏替换成经典样式
2022/04/19 数码科技