python使用socket创建tcp服务器和客户端


Posted in Python onApril 12, 2018

python使用socket创建tcp服务器和客户端。

服务器端为一个时间戳服务器,在接收到客户端发来的数据后,自动回复。

客户端,等待用户输入,回车后向服务器发送用户输入的内容。

分别在python2.7和python3.6下测试。在启动时需要先启动服务器端,在启动客户端。

python2.7下

服务器端代码为

#coding:utf-8

from socket import *
from time import ctime

print("=====================时间戳TCP服务器=====================");

HOST = '' #主机号为空白表示可以使用任何可用的地址。
PORT = 21567 #端口号
BUFSIZ = 1024 #接收数据缓冲大小
ADDR = (HOST, PORT)

tcpSerSock = socket(AF_INET, SOCK_STREAM) #创建TCP服务器套接字
tcpSerSock.bind(ADDR) #套接字与地址绑定
tcpSerSock.listen(5) #监听连接,同时连接请求的最大数目

while True:
  print('等待客户端的连接...')
  tcpCliSock, addr = tcpSerSock.accept()  #接收客户端连接请求
  print('取得连接:', addr)

  while True:
    data = tcpCliSock.recv(BUFSIZ) #连续接收指定字节的数据,接收到的是字节数组
    if not data: #如果数据空白,则表示客户端退出,所以退出接收
      break
    tcpCliSock.send('[%s] %s' % (ctime(), data)) #向客户端发送时间戳数据

  tcpCliSock.close() #关闭与客户端的连接
tcpSerSock.close() #关闭服务器socket

客户端代码为

#coding:utf-8

from socket import *

print("=====================TCP客户端=====================");

HOST = '127.0.0.1' #服务器ip地址,等价于localhost
PORT = 21567 #通信端口号
BUFSIZ = 1024 #接收数据缓冲大小
ADDR = (HOST, PORT)

tcpCliSock = socket(AF_INET, SOCK_STREAM) #创建客户端套接字
tcpCliSock.connect(ADDR) #发起TCP连接

while True:
  data = raw_input('> ')  #接收用户输入
  if not data: #如果用户输入为空,直接回车就会发送"",""就是代表false
    break
  tcpCliSock.send(data)  #客户端发送消息
  data = tcpCliSock.recv(BUFSIZ)  #接收回应消息,接收到的是字节数组
  if not data:  #如果接收服务器信息失败,或没有消息回应
    break
  print(data) #打印回应消息

tcpCliSock.close() #关闭客户端socket

python3.6下

服务器端代码为

#coding:utf-8

from socket import *
from time import ctime

print("=====================时间戳TCP服务器=====================");

HOST = '127.0.0.1' #主机号为空白表示可以使用任何可用的地址。
PORT = 21567 #端口号
BUFSIZ = 1024 #接收数据缓冲大小
ADDR = (HOST, PORT)

tcpSerSock = socket(AF_INET, SOCK_STREAM) #创建TCP服务器套接字
tcpSerSock.bind(ADDR) #套接字与地址绑定
tcpSerSock.listen(5) #监听连接,同时连接请求的最大数目

while True:
  print('等待客户端的连接...')
  tcpCliSock, addr = tcpSerSock.accept()  #接收客户端连接请求
  print('取得连接:', addr)

  while True:
    data = tcpCliSock.recv(BUFSIZ) #连续接收指定字节的数据,接收到的是字节数组
    if not data: #如果数据空白,则表示客户端退出,所以退出接收
      break
    #tcpCliSock.send('[%s] %s' % (bytes(ctime(), 'utf-8'), data))
    tcpCliSock.send(bytes('[%s] %s' % (ctime(), data.decode('utf-8')), 'utf-8')) #向客户端发送时间戳数据,必须发送字节数组

  tcpCliSock.close() #关闭与客户端的连接
tcpSerSock.close() #关闭服务器socket

客户端代码为

#coding:utf-8

from socket import *

print("=====================TCP客户端=====================");

HOST = '127.0.0.1' #服务器ip地址,等价于localhost
PORT = 21567 #通信端口号
BUFSIZ = 1024 #接收数据缓冲大小
ADDR = (HOST, PORT)

tcpCliSock = socket(AF_INET, SOCK_STREAM) #创建客户端套接字
tcpCliSock.connect(ADDR) #发起TCP连接

while True:
  data = input('> ')  #接收用户输入
  if not data: #如果用户输入为空,直接回车就会发送"",""就是代表false
    break
  tcpCliSock.send(bytes(data, 'utf-8'))  #客户端发送消息,必须发送字节数组
  data = tcpCliSock.recv(BUFSIZ)  #接收回应消息,接收到的是字节数组
  if not data:  #如果接收服务器信息失败,或没有消息回应
    break
  print(data.decode('utf-8')) #打印回应消息,或者str(data,"utf-8")

tcpCliSock.close() #关闭客户端socket

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

Python 相关文章推荐
Python 第一步 hello world
Sep 25 Python
Windows下安装python2和python3多版本教程
Mar 30 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
May 21 Python
对python list 遍历删除的正确方法详解
Jun 29 Python
解决python3读取Python2存储的pickle文件问题
Oct 25 Python
Python字符串的全排列算法实例详解
Jan 07 Python
python中的print()输出
Apr 12 Python
python使用tkinter库实现五子棋游戏
Jun 18 Python
简单了解为什么python函数后有多个括号
Dec 19 Python
详解Django中的FBV和CBV对比分析
Mar 01 Python
Python使用Kubernetes API访问集群
May 30 Python
Python matplotlib绘制雷达图
Apr 13 Python
Python简单实现两个任意字符串乘积的方法示例
Apr 12 #Python
Java与Python两大幸存者谁更胜一筹呢
Apr 12 #Python
python打包压缩、读取指定目录下的指定类型文件
Apr 12 #Python
pandas全表查询定位某个值所在行列的方法
Apr 12 #Python
Python Pandas找到缺失值的位置方法
Apr 12 #Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
Apr 12 #Python
dataframe设置两个条件取值的实例
Apr 12 #Python
You might like
PHP 遍历文件实现代码
2011/05/04 PHP
php的array_multisort()使用方法介绍
2012/05/16 PHP
PHP生成不同颜色、不同大小的tag标签函数
2013/09/23 PHP
Zend Framework教程之动作的基类Zend_Controller_Action详解
2016/03/07 PHP
PHP实现提取多维数组指定一列的方法总结
2019/12/04 PHP
用js自动判断浏览器分辨率的代码
2007/01/28 Javascript
通过jQuery源码学习javascript(二)
2012/12/27 Javascript
使用非html5实现js板连连看游戏示例代码
2013/09/22 Javascript
jQuery表单域选择器用法分析
2015/02/10 Javascript
jQuery实现Tab选项卡切换效果简单演示
2015/11/23 Javascript
JS控制HTML元素的显示和隐藏的两种方法
2016/09/27 Javascript
微信小程序 条件渲染详解
2016/10/09 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
2016/12/24 Javascript
Angularjs通过指令监听ng-repeat渲染完成后执行脚本的方法
2016/12/31 Javascript
JavaScript与Java正则表达式写法的区别介绍
2017/08/15 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
2019/07/04 Javascript
jQuery实现开关灯效果
2020/08/02 jQuery
Python装饰器使用实例:验证参数合法性
2015/06/24 Python
启动Atom并运行python文件的步骤
2018/11/09 Python
Python3标准库总结
2019/02/19 Python
python2使用bs4爬取腾讯社招过程解析
2019/08/14 Python
python对常见数据类型的遍历解析
2019/08/27 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
2019/12/25 Python
Python常用数据分析模块原理解析
2020/07/20 Python
CSS3制作精致的照片墙特效
2016/06/07 HTML / CSS
三维科技面试题
2013/07/27 面试题
查环查孕证明
2014/01/10 职场文书
财务会计专业自荐书
2014/06/30 职场文书
农业项目建议书
2014/08/25 职场文书
敬老月活动总结
2014/08/28 职场文书
师德师风自查材料
2014/10/14 职场文书
品质保证书格式
2015/02/28 职场文书
求职简历自我评价怎么写
2015/03/10 职场文书
小学生暑假安全公约
2015/07/14 职场文书
python 实现体质指数BMI计算
2021/05/26 Python
如何将JavaScript将数组转为树形结构
2021/06/02 Javascript