你好大家好,今天说一下python的套接字编程,基于python的插座通信的文本框网络聊天
首先,<强>实验环境:强>
一个云服务器(我们这里是用的阿里云,大家将就自己的条件吧),
类Unix操作系统(如Mac OS、Linux等);
Windows系列操作系统。
在这里,我使用的是阿里云,Mac OSX, Windows XP(在Mac上的一个虚拟机)。
Server.py
# - * -编码:utf - 8 - * # !/usr/地方/bin/python 进口套接字 导入系统 进口线程 反对=threading.Condition () 主机="云空间的IP地址” 端口=端口 datahttps://www.yisu.com/zixun/=? s=socket.socket(套接字。AF_INET socket.SOCK_STREAM) 打印的套接字创建 年代。bind((主机、端口)) s.listen (10) 打印“现在插座听” def clientThreadIn(康涅狄格州,尼克):#开辟线程 全局数据 而真正的:#接受客户端数据 试一试: temp=conn.recv (1024) 如果不是临时: conn.close() #连接关闭 返回 NotifyAll(临时) 打印数据 除了: NotifyAll (nick +”离开了房间!”) 打印数据 返回 def NotifyAll (sss): #广播 全局数据 如果con.acquire (): data=瑞士 con.notifyAll () con.release () def ClientThreadOut(康涅狄格州,尼克):#客户端输出 全局数据 而真正的: 如果con.acquire (): con.wait () 如果数据: 试一试: conn.send(数据) con.release () 除了: con.release () 返回 而1: 康涅狄格州,addr=s.accept () 打印”与“+ addr [0] +‘:’+ str (addr [1]) 尼克=conn.recv (1024) NotifyAll(‘欢迎’+尼克+房间!) 打印数据 打印str ((threading.activeCount() + 1)/2) +“人(s) !” conn.send(数据) 线程。线程(目标=clientThreadIn args=(康涅狄格州,尼克)).start() #开辟线程 线程。线程(目标=ClientThreadOut args=(康涅狄格州,尼克)).start () s.close ()
客户端。py
# - * -编码:utf - 8 - * 进口套接字 进口线程 进口getpass inString=" outString=" 尼克=" def DealOut (s): computername=socket.gethostname() #获取计算机名 全球尼克,outString 而真正的: outString=raw_input (nick +“:”) 尼克outString=+“@”+ computername + + outString“:” s.send (outString) def DealIn (s): 全球inString 而真正的: 试一试: inString=s.recv (1024) 如果不是inString: 打破 如果outString !=inString: 打印inString 除了: 打破 尼克=getpass.getuser() #获取操作系统用户名 ip="云空间ip地址” 袜子=socket.socket(插座。AF_INET socket.SOCK_STREAM) 袜子。连接((ip端口) sock.send(尼克) 瘦=线程。线程(目标=DealIn args=(袜子))#开辟一个读入的线程 thin.start () 无=线程。线程(目标=DealOut args=(袜子))#开辟一个写出的线程 thout.start ()
将server.py上传云端,运行,如图:
将client.py在mac系统上运行,如图:
将client.py在视窗xp虚拟机上运行,如图:
好的,这就可以了,一个基于python的插座通信的文本框网络聊天室就写好了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。