python实现点对点聊天程序


Posted in Python onJuly 28, 2018

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
跟老齐学Python之使用Python查询更新数据库
Nov 25 Python
python获取当前计算机cpu数量的方法
Apr 18 Python
Python合并字符串的3种方法
May 21 Python
Python实现获取命令行输出结果的方法
Jun 10 Python
python快速建立超简单的web服务器的实现方法
Feb 17 Python
python3解析库pyquery的深入讲解
Jun 26 Python
python3 flask实现文件上传功能
Mar 20 Python
Python安装及Pycharm安装使用教程图解
Sep 20 Python
如何查看Django ORM执行的SQL语句的实现
Apr 20 Python
Django使用rest_framework写出API
May 21 Python
Django封装交互接口代码
Jul 12 Python
解决Windows下python和pip命令无法使用的问题
Aug 31 Python
基于python实现聊天室程序
Jul 27 #Python
Python中return self的用法详解
Jul 27 #Python
TensorFlow打印tensor值的实现方法
Jul 27 #Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 27 #Python
Tensorflow 同时载入多个模型的实例讲解
Jul 27 #Python
Tensorflow加载预训练模型和保存模型的实例
Jul 27 #Python
Python解决走迷宫问题算法示例
Jul 27 #Python
You might like
php防盗链的常用方法小结
2010/07/02 PHP
ThinkPHP快速入门实例教程之数据分页
2014/07/01 PHP
PHP中new static()与new self()的比较
2016/08/19 PHP
js 省地市级联选择
2010/02/07 Javascript
IE6下js通过css隐藏select的一个bug
2010/08/16 Javascript
Event altKey,ctrlKey,shiftKey属性解析
2013/12/18 Javascript
使用typeof方法判断undefined类型
2014/09/09 Javascript
jQuery on方法传递参数示例
2014/12/09 Javascript
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
2015/11/24 Javascript
JavaScript动态创建form表单并提交的实现方法
2015/12/10 Javascript
jquery mobile 移动web(5)
2015/12/20 Javascript
详解Javascript中DOM的范围
2017/02/13 Javascript
微信小程序实现收藏与取消收藏切换图片功能
2018/08/03 Javascript
vue 点击按钮实现动态挂载子组件的方法
2018/09/07 Javascript
vue-router命名视图的使用讲解
2019/01/19 Javascript
详解element-ui表格中勾选checkbox,高亮当前行
2019/09/02 Javascript
layer.open组件获取弹出层页面变量、函数的实例
2019/09/25 Javascript
Js代码中的span拼接问题解决
2019/11/22 Javascript
vue路由切换时取消之前的所有请求操作
2020/09/01 Javascript
linux服务器快速卸载安装node环境(简单上手)
2021/02/22 Javascript
[54:05]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第一场 1月9日
2021/03/11 DOTA
实例讲解python函数式编程
2014/06/09 Python
Python pickle模块用法实例
2015/04/14 Python
Python3实现的字典、列表和json对象互转功能示例
2018/05/22 Python
PIL对上传到Django的图片进行处理并保存的实例
2019/08/07 Python
Python 下载及安装详细步骤
2019/11/04 Python
python单向循环链表原理与实现方法示例
2019/12/03 Python
赫里福德的一家乡村零售商店:Philip Morris & Son
2017/06/25 全球购物
Kathmandu澳洲户外商店:新西兰户外运动品牌
2017/11/12 全球购物
爱尔兰电子产品购物网站:Komplett.ie
2018/04/04 全球购物
计算 s=(x*y)1/2,用两个宏定义来实现
2016/08/11 面试题
Linux面试经常问的文件系统操作命令
2015/11/05 面试题
医学生实习自我鉴定
2013/09/27 职场文书
贪污受贿检讨书范文
2014/11/19 职场文书
如何通过一篇文章了解Python中的生成器
2022/04/02 Python
JavaScript前端面试组合函数
2022/06/21 Javascript