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 相关文章推荐
下载安装setuptool和pip linux安装pip    
Jan 24 Python
python实现的udp协议Server和Client代码实例
Jun 04 Python
python实现多线程的方式及多条命令并发执行
Jun 07 Python
Python 2.x如何设置命令执行的超时时间实例
Oct 19 Python
python学习入门细节知识点
Mar 29 Python
Python环境Pillow( PIL )图像处理工具使用解析
Sep 12 Python
selenium中get_cookies()和add_cookie()的用法详解
Jan 06 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
Feb 16 Python
python环境下安装opencv库的方法
Mar 05 Python
python 异步async库的使用说明
May 04 Python
python利用appium实现手机APP自动化的示例
Jan 26 Python
python lambda的使用详解
Feb 26 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
fetchAll()与mysql_fetch_array()的区别详解
2013/06/05 PHP
一个简单安全的PHP验证码类 附调用方法
2016/06/24 PHP
CI框架常用函数封装实例
2016/11/21 PHP
laravel配置Redis多个库的实现方法
2019/04/10 PHP
jQuery使用手册之三 CSS操作
2007/03/24 Javascript
Javascript Tab 导航插件 (23个)
2009/06/11 Javascript
jquery实现metro效果示例代码
2013/09/06 Javascript
jQuery实现Tab选项卡切换效果简单演示
2015/11/23 Javascript
JavaScript html5 canvas画布中删除一个块区域的方法
2016/01/26 Javascript
js中删除数组中的某一元素实例(无下标时)
2017/02/28 Javascript
详解使用grunt完成requirejs的合并压缩和js文件的版本控制
2017/03/02 Javascript
JavaScript正则获取地址栏中参数的方法
2017/03/02 Javascript
Node.js如何实现注册邮箱激活功能 (常见)
2017/07/23 Javascript
微信小程序列表渲染功能之列表下拉刷新及上拉加载的实现方法分析
2017/11/27 Javascript
vue+node实现图片上传及预览的示例方法
2018/11/22 Javascript
简单了解Ajax表单序列化的实现方法
2019/06/14 Javascript
Vue+Typescript中在Vue上挂载axios使用时报错问题
2019/08/07 Javascript
解决Vue大括号字符换行踩的坑
2020/11/09 Javascript
python中的一些类型转换函数小结
2013/02/10 Python
python批量替换多文件字符串问题详解
2018/04/22 Python
详解python多线程、锁、event事件机制的简单使用
2018/04/27 Python
django框架自定义模板标签(template tag)操作示例
2019/06/24 Python
Python使用enumerate获取迭代元素下标
2020/02/03 Python
Django缓存Cache使用详解
2020/11/30 Python
用canvas做一个DVD待机动画的实现代码
2019/04/12 HTML / CSS
详解三种方式实现平滑滚动页面到顶部的功能
2019/04/23 HTML / CSS
数据库什么时候应该被重组
2012/11/02 面试题
决心书标准格式
2014/03/11 职场文书
小学班主任培训方案
2014/06/04 职场文书
2014年度党员自我评议
2014/09/13 职场文书
2014向国旗敬礼网上签名活动总结
2014/09/27 职场文书
区域经理岗位职责
2015/02/02 职场文书
行政司机岗位职责
2015/04/10 职场文书
css display table 自适应高度、宽度问题的解决
2021/05/07 HTML / CSS
Pygame Draw绘图函数的具体使用
2021/11/17 Python
MySQL创建管理RANGE分区
2022/04/13 MySQL