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中使用Tkinter模块创建GUI程序实例
Jan 14 Python
简单介绍Python的Django框架加载模版的方式
Jul 20 Python
详解Python网络爬虫功能的基本写法
Jan 28 Python
机器学习经典算法-logistic回归代码详解
Dec 22 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
Dec 27 Python
numpy.random模块用法总结
May 27 Python
Django 使用easy_thumbnails压缩上传的图片方法
Jul 26 Python
Python random模块制作简易的四位数验证码
Feb 01 Python
django model通过字典更新数据实例
Apr 01 Python
python怎么对数字进行过滤
Jul 05 Python
django序列化时使用外键的真实值操作
Jul 15 Python
pycharm 实现复制一行的快捷键
Jan 15 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
用ADODB来让PHP操作ACCESS数据库的方法
2006/12/31 PHP
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
php返回当前日期或者指定日期是周几
2015/05/21 PHP
如何使用Gitblog和Markdown建自己的博客
2015/07/31 PHP
CakePHP框架Model关联对象用法分析
2017/08/04 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
jQuery移动和复制dom节点实用DOM操作案例
2012/12/17 Javascript
javascript和HTML5利用canvas构建猜牌游戏实现算法
2013/07/17 Javascript
table对象中的insertRow与deleteRow使用示例
2014/01/26 Javascript
基于javascript的COOkie的操作实现只能点一次
2014/12/26 Javascript
JavaScript代码判断点击第几个按钮
2015/12/13 Javascript
Bootstrap中CSS的使用方法
2016/02/17 Javascript
JS获取子窗口中返回的数据实现方法
2016/05/28 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
2016/06/01 Javascript
JavaScript队列、优先队列与循环队列
2016/11/14 Javascript
js实现文字列表无缝滚动效果
2017/06/23 Javascript
详解angular笔记路由之angular-router
2017/09/12 Javascript
使用vue打包进行云服务器上传的问题
2020/03/02 Javascript
ant design的table组件实现全选功能以及自定义分页
2020/11/17 Javascript
vue-cli4.0多环境配置变量与模式详解
2020/12/30 Vue.js
[02:51]DOTA2 2015国际邀请赛中国区预选赛第一日战报
2015/05/27 DOTA
Python文件监听工具pyinotify与watchdog实例
2018/10/15 Python
利用Python实现kNN算法的代码
2019/08/16 Python
Python搭建代理IP池实现接口设置与整体调度
2019/10/27 Python
opencv3/C++ 平面对象识别&透视变换方式
2019/12/11 Python
python3.7+selenium模拟淘宝登录功能的实现
2020/05/26 Python
opencv 实现特定颜色线条提取与定位操作
2020/06/02 Python
使用HTML5的链接预取功能(link prefetching)给网站提速
2012/12/13 HTML / CSS
JBL英国官网:JBL UK
2018/07/04 全球购物
给老师的检讨书
2014/02/11 职场文书
政府班子四风问题整改措施思想汇报
2014/10/08 职场文书
写自招自荐信的绝招!
2019/04/19 职场文书
Python实战之用tkinter库做一个鼠标模拟点击器
2021/04/27 Python
十个Python自动化常用操作,即拿即用
2021/05/10 Python
基于JavaScript实现省市联动效果
2021/06/22 Javascript
聊聊配置 Nginx 访问与错误日志的问题
2022/05/25 Servers