python学习教程(十二),一个文本界面下网络聊天室
2014-04-09 21:19
423 查看
Hello大家好,今天说一下python的socket编程,
首先,实验环境:
一个云服务器(我们这里是用的阿里云,大家将就自己的条件吧);
类Unix操作系统(如Mac OS,Linux等);
Windows系列操作系统。
在这里,我使用的是阿里云,Mac OSX,Windows XP(在mac上的一个虚拟机)。
Server.py
Client.py
将client.py在mac系统上运行,如图:
将client.py在WindowsXP虚拟机上运行,如图:
OK,这就可以了,一个基于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上传云端,运行,如图:
将client.py在mac系统上运行,如图:
将client.py在WindowsXP虚拟机上运行,如图:
OK,这就可以了,一个基于python的socket通信的文本框网络聊天室就写好了。
相关文章推荐
- python基础教程_学习笔记24:网络编程、Python和万维网
- <<Python基础教程>>学习笔记 | 第14章 | 网络编程
- 【python学习】网络爬虫——基础案例教程
- 学习python tkinter 写的一个工具界面
- 网络游戏服务器开发::学习了两天python写了一个linux下自动安装程序的脚本
- 深度学习(二):用CNTK在Python下实现一个简单的FeedForward网络
- 最新整理python神经网络深度学习算法全套视频教程
- <<Python基础教程>>学习笔记 | 第14章 | 网络编程
- 循环神经网络教程第二部分-用python,numpy,theano实现一个RNN
- Python基础教程——14 网络编程
- pybrain学习教程(三):训练神经网络
- Python网络爬虫基础知识学习
- 给深度学习入门者的Python快速教程 - numpy和Matplotlib篇
- python 对入参文本进行预处理成以一个空格为间隔的一维数组
- 深度学习系列教程 -1.2.4 神经网络是如何进行学习的
- Python基础教程学习笔记----第一章
- cocos2d-x 3.0来做一个简单的游戏教程 win32平台 vs2012 详解献给刚開始学习的人们!
- Python学习入门基础教程(learning Python)--3 Python分支结构和布尔逻辑
- Python 黑客 004 用Python构建一个SSH僵尸网络 01 简介
- Python-黑客-004 用Python构建一个SSH僵尸网络-02 手动与SSH交互