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计算圆周长、面积、球体体积并画出圆
Apr 08 Python
分享15个最受欢迎的Python开源框架
Jul 13 Python
Python中几种操作字符串的方法的介绍
Apr 09 Python
python 读写txt文件 json文件的实现方法
Oct 22 Python
python中文乱码不着急,先看懂字节和字符
Dec 20 Python
Python 记录日志的灵活性和可配置性介绍
Feb 27 Python
Python3实现的字典遍历操作详解
Apr 18 Python
使用python爬取B站千万级数据
Jun 08 Python
python高阶爬虫实战分析
Jul 29 Python
由Python编写的MySQL管理工具代码实例
Apr 09 Python
Python数据类型之List列表实例详解
May 08 Python
python实现会员信息管理系统(List)
Mar 18 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编程过程中需要了解的this,self,parent的区别
2009/12/30 PHP
PHP 文件缓存的性能测试
2010/04/25 PHP
PHP 开发环境配置(Zend Server安装)
2010/04/28 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
2013/06/03 PHP
Joomla调用系统自带编辑器的实现方法
2016/05/05 PHP
yii 2.0中表单小部件的使用方法示例
2017/05/23 PHP
Gambit vs CL BO3 第三场 2.13
2021/03/10 DOTA
设置下载不需要倒计时cookie(倒计时代码)
2008/11/19 Javascript
在VS2008中使用jQuery智能感应的方法
2010/12/30 Javascript
使用javascript为网页增加夜间模式
2014/01/26 Javascript
学习JavaScript设计模式(策略模式)
2015/11/26 Javascript
Jquery技巧(必须掌握)
2016/03/16 Javascript
浅析JavaScript Array和string的转换(推荐)
2016/05/20 Javascript
PHP获取当前页面完整URL的方法
2016/12/02 Javascript
解决Linux无法正常安装与卸载Node.js的方法
2018/01/19 Javascript
浅谈webpack组织模块的原理
2018/03/10 Javascript
解决vue-cli + webpack 新建项目出错的问题
2018/03/20 Javascript
elementUI 设置input的只读或禁用的方法
2018/10/30 Javascript
一文秒懂nodejs中的异步编程
2021/01/28 NodeJs
使用Python中的cookielib模拟登录网站
2015/04/09 Python
python查看zip包中文件及大小的方法
2015/07/09 Python
Python使用正则表达式获取网页中所需要的信息
2018/01/29 Python
Python3.4学习笔记之 idle 清屏扩展插件用法分析
2019/03/01 Python
对python 中class与变量的使用方法详解
2019/06/26 Python
python selenium自动化测试框架搭建的方法步骤
2020/06/14 Python
使用python实现CGI环境搭建过程解析
2020/04/28 Python
python3中for循环踩过的坑记录
2020/12/14 Python
Missguided美国官网:英国时尚品牌
2018/01/18 全球购物
英国最大的宠物商店:Pets at Home
2019/04/17 全球购物
Timberland俄罗斯官方网上商店:全球领先的户外品牌
2020/03/15 全球购物
检察院院长群众路线教育实践活动个人整改措施
2014/10/04 职场文书
奠基仪式致辞
2015/07/30 职场文书
Python使用random模块实现掷骰子游戏的示例代码
2021/04/29 Python
python关于集合的知识案例详解
2021/05/30 Python
全面盘点MySQL中的那些重要日志文件
2021/11/27 MySQL
Smart 2 车辆代号 HC11 全新谍照曝光
2022/04/21 数码科技