网络编程
位置:首页>> 网络编程>> Python编程>> python实现点对点聊天程序

python实现点对点聊天程序

作者:csuzhucong  发布时间:2023-10-27 11:42:02 

标签:python,聊天程序

用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()

来源:https://blog.csdn.net/nameofcsdn/article/details/75119572

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com