python实现点对点聊天程序
用Python实现点对点的聊天,2个程序,一个是client.py,一个是server.py,通过本机地址127.0.0.1连接进行通信,利用多线程把发送消息和接收消息分开独立进行。
client代码:
importsocket
importsys
importthreading
importtime
classclient():
def__init__(self):
self.s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.ip="127.0.0.1"
defconnect(self):
try:
self.s.connect((self.ip,8888))
print("connectsuccess")
print('connecttime:'+time.ctime())
exceptConnectionError:
print('connecterror')
sys.exit(-1)
except:
print('unexpecterror')
sys.exit(-1)
defsend_sth(self):
whileTrue:
sth=input('saysomething:\n')
try:
self.s.sendall(sth.encode('utf-8'))
exceptConnectionError:
print('connecterror')
sys.exit(-1)
except:
print('unexpecterror')
sys.exit(-1)
defreceive(self):
whileTrue:
try:
r=self.s.recv(1024)
print('getmessage:'+r.decode('utf-8'))
exceptConnectionError:
print('connecterror')
sys.exit(-1)
except:
print('unexpecterror')
sys.exit(-1)
c1=client()
c1.connect()
threading._start_new_thread(c1.receive,())
c1.send_sth()
server代码:
importsocket
importsys
importthreading
importtime
defserver():
defbind():
HOST='127.0.0.1'
s.bind((HOST,8888))
print("bindok")
deflisten():
s.listen(10)
print('Socketnowlistening')
defsend_sth(conn):
whileTrue:
try:
sth=input('saysomething:\n')
conn.sendall(sth.encode('utf-8'))
exceptConnectionError:
print('connecterror')
sys.exit(-1)
except:
print('unexpecterror')
sys.exit(-1)
defrecv(conn):
whileTrue:
try:
data=conn.recv(1024)
data2=data.decode('utf-8')
print('getmessage:'+data2)
exceptConnectionError:
print('connecterror')
sys.exit(-1)
except:
print('unexpecterror')
sys.exit(-1)
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
bind()
listen()
conn,addr=s.accept()
print("connectsuccess")
print('connecttime:'+time.ctime())
threading._start_new_thread(recv,(conn,))
send_sth(conn)
if__name__=='__main__':
server()
开启多线程有2种方法,上面2个程序都是用函数的方法,还有一种方法是用类继承threading类
代码:
importsocket
importthreading
classclient(threading.Thread):
def__init__(self,sth):
threading.Thread.__init__(self)
self.sth=sth
defrun(self):
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
ip="127.0.0.1"
try:
s.connect((ip,8888))
except:
print('conerror')
exit()
#print("connectsuccess")
s.sendall(self.sth.encode('utf-8'))
#print("sendsuccess")
try:
r=s.recv(1024)
except:
print('recverror')
exit()
print(r.decode('utf-8'))
c1=client('hello1')
c1.start()
c2=client('hello2')
c2.start()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。