python聊天程序(socket+多线程)
【摘要】
用Python实现点对点的聊天,2个程序,一个是client.py,一个是server.py,通过本机地址127.0.0.1连接进行通信,利用多线程把发送消息和接收消息分开独立进行。
client代码:
import socketimport sysimport threadingimport timeclass cl...
用Python实现点对点的聊天,2个程序,一个是client.py,一个是server.py,通过本机地址127.0.0.1连接进行通信,利用多线程把发送消息和接收消息分开独立进行。
client代码:
-
import socket
-
import sys
-
import threading
-
import time
-
-
class client():
-
def __init__(self):
-
self.s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
-
self.ip = "127.0.0.1"
-
-
def connect(self):
-
try:
-
self.s.connect((self.ip,8888))
-
print("connect success")
-
print('connect time: '+time.ctime())
-
except ConnectionError:
-
print('connect error')
-
sys.exit(-1)
-
except:
-
print('unexpect error')
-
sys.exit(-1)
-
-
def send_sth(self):
-
while True:
-
sth=input('say something:\n')
-
try:
-
self.s.sendall(sth.encode('utf-8'))
-
except ConnectionError:
-
print('connect error')
-
sys.exit(-1)
-
except:
-
print('unexpect error')
-
sys.exit(-1)
-
-
def receive(self):
-
while True:
-
try:
-
r=self.s.recv(1024)
-
print ('get message:'+r.decode('utf-8'))
-
except ConnectionError:
-
print('connect error')
-
sys.exit(-1)
-
except:
-
print('unexpect error')
-
sys.exit(-1)
-
-
c1 = client()
-
c1.connect()
-
threading._start_new_thread(c1.receive,())
-
c1.send_sth()
server代码:
-
import socket
-
import sys
-
import threading
-
import time
-
-
def server():
-
def bind():
-
HOST='127.0.0.1'
-
s.bind((HOST,8888))
-
print("bind ok")
-
-
def listen():
-
s.listen(10)
-
print ('Socket now listening')
-
-
def send_sth(conn):
-
while True:
-
try:
-
sth=input('say something:\n')
-
conn.sendall(sth.encode('utf-8'))
-
except ConnectionError:
-
print('connect error')
-
sys.exit(-1)
-
except:
-
print('unexpect error')
-
sys.exit(-1)
-
-
def recv(conn):
-
while True:
-
try:
-
data=conn.recv(1024)
-
data2=data.decode('utf-8')
-
print('get message:'+data2)
-
except ConnectionError:
-
print('connect error')
-
sys.exit(-1)
-
except:
-
print('unexpect error')
-
sys.exit(-1)
-
-
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
-
bind()
-
listen()
-
conn,addr=s.accept()
-
print("connect success")
-
print('connect time: '+time.ctime())
-
threading._start_new_thread(recv,(conn,))
-
send_sth(conn)
-
-
if __name__=='__main__':
-
server()
开启多线程有2种方法,上面2个程序都是用函数的方法,还有一种方法是用类继承threading类
代码:
-
import socket
-
import threading
-
class client(threading.Thread):
-
def __init__(self,sth):
-
threading.Thread.__init__(self)
-
self.sth=sth
-
def run(self):
-
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
-
ip="127.0.0.1"
-
try:
-
s.connect((ip,8888))
-
except :
-
print('con error')
-
exit()
-
#print("connect success")
-
s.sendall(self.sth.encode('utf-8'))
-
#print("send success")
-
try:
-
r=s.recv(1024)
-
except:
-
print('recv error')
-
exit()
-
print (r.decode('utf-8'))
-
c1=client('hello 1')
-
c1.start()
-
c2=client('hello 2')
-
c2.start()
文章来源: blog.csdn.net,作者:csuzhucong,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/nameofcsdn/article/details/75119572
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)