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实现list反转实例汇总
Nov 11 Python
Python通过poll实现异步IO的方法
Jun 04 Python
使用FastCGI部署Python的Django应用的教程
Jul 22 Python
Python中取整的几种方法小结
Jan 06 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
May 30 Python
对Python捕获控制台输出流的方法详解
Jan 07 Python
Python之时间和日期使用小结
Feb 14 Python
基于jupyter代码无法在pycharm中运行的解决方法
Apr 21 Python
Python多个装饰器的调用顺序实例解析
May 22 Python
python中字符串的编码与解码详析
Dec 03 Python
python gui开发——制作抖音无水印视频下载工具(附源码)
Feb 07 Python
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
Apr 12 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
overlord人气高涨,却被菲利普频繁举报,第四季很难在国内上映
2020/05/06 日漫
php dirname(__FILE__) 获取当前文件的绝对路径
2011/06/28 PHP
PHP采集静态页面并把页面css,img,js保存的方法
2014/12/23 PHP
php 使用redis锁限制并发访问类示例
2016/11/02 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
2016/12/21 PHP
php实现文件预览功能
2017/05/23 PHP
PHP使用HTML5 FileApi实现Ajax上传文件功能示例
2019/07/01 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
动态的绑定事件addEventListener方法的使用
2014/01/24 Javascript
JavaScript自定义数组排序方法
2015/02/12 Javascript
Javascript中引用类型传递的知识点小结
2017/03/06 Javascript
详解webpack分包及异步加载套路
2017/06/29 Javascript
自定义事件解决重复请求BUG的问题
2017/07/11 Javascript
关于JavaScript语句后面的分号问题
2017/12/07 Javascript
详解vue-cli@2.x项目迁移日志
2019/06/06 Javascript
这应该是最详细的响应式系统讲解了
2019/07/22 Javascript
VUE实现密码验证与提示功能
2019/10/18 Javascript
vue请求服务器数据后绑定不上的解决方法
2019/10/30 Javascript
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
2020/05/19 Javascript
js实现鼠标拖曳效果
2020/12/30 Javascript
Python爬虫爬验证码实现功能详解
2016/04/14 Python
python 定时修改数据库的示例代码
2018/04/08 Python
pytorch 准备、训练和测试自己的图片数据的方法
2020/01/10 Python
Python实现对adb命令封装
2020/03/06 Python
pandas针对excel处理的实现
2021/01/15 Python
python源文件的字符编码知识点详解
2021/03/04 Python
html5如何在Canvas中实现自定义路径动画示例
2017/09/18 HTML / CSS
美国快时尚彩妆品牌:Winky Lux(透明花瓣润唇膏)
2018/11/06 全球购物
团员学习总结的自我评价范文
2013/10/14 职场文书
甜品店的创业计划书范文
2014/01/02 职场文书
节约每一滴水演讲稿
2014/09/09 职场文书
结婚保证书(卖身契)
2015/02/26 职场文书
离婚起诉书范文2016
2015/11/26 职场文书
SQLServer之常用函数总结详解
2021/08/30 SQL Server
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android
springboot实现string转json json里面带数组
2022/06/16 Java/Android