python 实现客户端与服务端的通信


Posted in Python onDecember 23, 2020

函数介绍

Socket对象方法:

服务端:

函数 描述
.bind() 绑定地址关键字,AF_INET下以元组的形式表示地址。常用bind((host,port))
.listen() 监听TCP,可以挂起的最大连接数,该值至少为1,一般设为5即可
.accept() 被动接受TCP客户端的连接

客户端:

函数 描述
.connect() 初始化服务器连接
.connect_ex() 是对connect()函数的扩展,当出错时返回出错码,不报异常

其它函数:

函数 描述
.recv() 接收数据,数据以字符串的形式返回,bufsize指定接收的最大数据量。
.send() 发送数据,将string中的数据发送到连接的套接字,返回值是要发送的字节数量,通常使用.encode()函数对数据进行转码
.senddall() 发送完整的数据,在返回之前会尝试发送所有数据,成功返回None,失败则抛出异常。
.recvfrom() 与recv()函数类似,不同的是返回值是(data,address),其中data是包含接收数据的字符串,address是发送数据的套接字地址。
.sendto() 发送UDP数据,将数据发送到套接字,形式是(ipaddr,port)的元组。
.close() 关闭套接字

服务端

使用socket函数来创建一个socket对象,并设置一个socket服务,然后通过bind(hostname,port)函数来指定一个端口,使用socket对象的accept方法,等待客户端的连接,并返回connection对象。
具体步骤为:

创建服务端套接字
serversocket=socket()
把地址绑定到套接字
serversocket.bind()
对连接进行监听
serversocket.listen()
使用一个while进行循环,并接收客户端的连接
while True:
 serverclient=serversocket.accept()
 while True:
   #接收已发送
   serverclient.recv()
   serverclient.send()
   #关闭客户端套接字
   serverclient.close()
关闭服务端套接字
serversocket.close()

具体代码实现:

import socket
import sys
import time

serversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host=socket.gethostname()#获取本地主机名
port=9999
#绑定端口号
serversocket.bind((host,port))

#设置最大连接数
serversocket.listen(5)
while True:
  print('服务器启动,监听客户端链接')
  clientsocket,addr=serversocket.accept()
  print('链接地址:%s' % str(addr))
  while True:
    try:
      data=clientsocket.recv(1024)
    except Exception:
      print('断开的客户端:',addr)
      break
    print('客户端发送内容:',data.decode('utf-8'))
    reply=input('回复:').strip()
    if not reply:
      break
    msg=time.strftime('%Y-%m-%d %X')#获取结构化时间戳
    msg1='[%s]:%s'% (msg,reply)
    clientsocket.send(msg1.encode('utf-8'))
  clientsocket.close()
serversocket.closel()

实现功能:通过while实现循环接收客户端发送的数据,并对客户端发送的数据进行显示并返回给客户端数据,返回给客户端的数据信息后加入时间戳。

客户端

创建一个客户端用来连接以上服务的的服务,使用socket.connect()方法打开一个TCP连接到主机,连接后可以从服务端获取数据,在操作完成后关闭连接。 具体步骤为: ``` 创建客户端的套接字 client=socket() 尝试连接服务器 client.connect() 发送并接收数据 client.send() client.recv() 关闭客户端套接字 client.close() ``` **具体代码实现:**

import socket
import sys


s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host=socket.gethostname()
port=9999
s.connect((host,port))
while True:
  data= input('>>').strip()
  if not data:
    break
  s.send(data.encode('utf-8'))
  msg=s.recv(1024)
  if not msg:
    break
  print(msg.decode('utf-8'))
s.close()

测试

使用cmd命令行中打开到代码所在文件目录,执行python 服务端文件名.py,再另打开一个cmd命令界面执行 python 客户端文件名.py
在pycharm中运行服务端代码,运行结果:

python 实现客户端与服务端的通信

在cmd中运行客户端代码,运行结果:

python 实现客户端与服务端的通信

以上就是python 实现客户端与服务端的通信的详细内容,更多关于python 客户端与服务端的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python实现类继承实例
Jul 04 Python
python中while循环语句用法简单实例
May 07 Python
在Django的视图中使用数据库查询的方法
Jul 16 Python
浅谈Python基础之I/O模型
May 11 Python
微信跳一跳自动运行python脚本
Jan 08 Python
python画柱状图--不同颜色并显示数值的方法
Dec 13 Python
Python3网络爬虫中的requests高级用法详解
Jun 18 Python
python 实现兔子生兔子示例
Nov 21 Python
Python环境下安装PyGame和PyOpenGL的方法
Mar 25 Python
解决Django中checkbox复选框的传值问题
Mar 31 Python
Python QTimer实现多线程及QSS应用过程解析
Jul 11 Python
python 对图片进行简单的处理
Jun 23 Python
python实现excel公式格式化的示例代码
Dec 23 #Python
python 基于opencv实现图像增强
Dec 23 #Python
python接口自动化框架实战
Dec 23 #Python
pycharm远程连接服务器并配置python interpreter的方法
Dec 23 #Python
python实现发送QQ邮件(可加附件)
Dec 23 #Python
如何通过安装HomeBrew来安装Python3
Dec 23 #Python
python实现定时发送邮件到指定邮箱
Dec 23 #Python
You might like
JavaScript中void(0)的具体含义解释
2007/02/27 Javascript
asp 取文本框名称代码
2008/12/02 Javascript
js里怎么取select标签里的值并修改
2012/12/10 Javascript
几种设置表单元素中文本输入框不可编辑的方法总结
2013/11/25 Javascript
JS兼容浏览器的导出Excel(CSV)文件的方法
2014/05/03 Javascript
Bootstrap每天必学之导航条
2015/11/27 Javascript
jQuery获取当前点击的对象元素(实现代码)
2016/05/19 Javascript
javascript中Number的方法小结
2016/11/21 Javascript
详解jQuery选择器
2016/12/21 Javascript
基于Vue2.0的分页组件
2017/03/16 Javascript
js中的DOM模拟购物车功能
2017/03/22 Javascript
JS中把函数作为另一函数的参数传递方法(总结)
2017/06/28 Javascript
使用Dropzone.js上传的示例代码
2017/10/10 Javascript
详解AngularJS之$window窗口对象
2018/01/17 Javascript
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
js中Object.defineProperty()方法的不详解
2018/07/09 Javascript
JavaScript实现的九种排序算法
2019/03/04 Javascript
layui table数据修改的回显方法
2019/09/04 Javascript
json解析大全 双引号、键值对不在一起的情况
2019/12/06 Javascript
javascript自定义右键菜单插件
2019/12/16 Javascript
python实现的登陆Discuz!论坛通用代码分享
2014/07/11 Python
Python编程之string相关操作实例详解
2017/07/22 Python
python之文件读取一行一行的方法
2018/07/12 Python
Python 打印中文字符的三种方法
2018/08/14 Python
Pycharm设置utf-8自动显示方法
2019/01/17 Python
python实现感知器算法(批处理)
2019/01/18 Python
Python线程之定位与销毁的实现
2019/02/17 Python
应用OpenCV和Python进行SIFT算法的实现详解
2019/08/21 Python
python自动化测试无法启动谷歌浏览器问题
2019/10/10 Python
Python 实现网课实时监控自动签到、打卡功能
2020/03/12 Python
Python使用20行代码实现微信聊天机器人
2020/06/05 Python
PHP如何自定义函数
2016/09/16 面试题
中间件分为哪几类
2016/09/18 面试题
小学运动会入场口号
2015/12/24 职场文书
解决Navicat for Mysql连接报错1251的问题(连接失败)
2021/05/27 MySQL
CentOS7安装GlusterFS集群以及相关配置
2022/04/12 Servers