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实现从脚本里运行scrapy的方法
Apr 07 Python
pytorch 把MNIST数据集转换成图片和txt的方法
May 20 Python
Python简单基础小程序的实例代码
Apr 28 Python
python库matplotlib绘制坐标图
Oct 18 Python
在Django中实现添加user到group并查看
Nov 18 Python
利用Tensorflow的队列多线程读取数据方式
Feb 05 Python
Python开发之pip安装及使用方法详解
Feb 21 Python
Python MySQLdb 执行sql语句时的参数传递方式
Mar 04 Python
python爬虫实例之获取动漫截图
May 31 Python
python dir函数快速掌握用法技巧
Dec 09 Python
python实现的web监控系统
Apr 27 Python
python随机打印成绩排名表
Jun 23 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 爬取网页的主要方法
2018/07/13 PHP
深入解析PHP底层机制及相关原理
2020/12/11 PHP
JavaScript中的Window窗口对象
2008/01/16 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
JavaScript使用replace函数替换字符串的方法
2015/04/06 Javascript
常见的javascript跨域通信方法
2015/12/31 Javascript
JavaScript日期选择功能示例
2017/01/16 Javascript
谈谈Vue.js——vue-resource全攻略
2017/01/16 Javascript
Angular.js自定义指令学习笔记实例
2017/02/24 Javascript
jQuery使用ajax_动力节点Java学院整理
2017/07/05 jQuery
Vue组件选项props实例详解
2017/08/18 Javascript
浅谈js基础数据类型和引用类型,深浅拷贝问题,以及内存分配问题
2017/09/02 Javascript
Vue2.0基于vue-cli+webpack Vuex的用法(实例讲解)
2017/09/15 Javascript
node+express+ejs使用模版引擎做的一个示例demo
2017/09/18 Javascript
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
重学JS 系列:聊聊继承(推荐)
2019/04/11 Javascript
node基于async/await对mysql进行封装
2019/06/20 Javascript
js实现从右往左匀速显示图片(无缝轮播)
2020/06/29 Javascript
python mysqldb连接数据库
2009/03/16 Python
python中sleep函数用法实例分析
2015/04/29 Python
基于hashlib模块--加密(详解)
2017/06/21 Python
Python中super函数的用法
2017/11/17 Python
TensorFlow模型保存和提取的方法
2018/03/08 Python
python 读取文件并替换字段的实例
2018/07/12 Python
dataframe 按条件替换某一列中的值方法
2019/01/29 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
Python3.x+pyqtgraph实现数据可视化教程
2020/03/14 Python
Python Tkinter图形工具使用方法及实例解析
2020/06/15 Python
HTML5实现多张图片上传功能
2016/03/11 HTML / CSS
HTML5 canvas基本绘图之绘制线条
2016/06/27 HTML / CSS
美国校园市场:OCM
2017/06/08 全球购物
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
英语专业推荐信
2013/11/16 职场文书
优秀小学生家长评语
2014/01/30 职场文书
幼儿园教师辞职信
2019/06/21 职场文书
MSSQL基本语法操作
2022/04/11 SQL Server