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的线程来解决生产者消费问题的示例
Apr 02 Python
Python模块包中__init__.py文件功能分析
Jun 14 Python
JSON Web Tokens的实现原理
Apr 02 Python
用Python实现随机森林算法的示例
Aug 24 Python
python实现贪吃蛇小游戏
Mar 21 Python
Python3中exp()函数用法分析
Feb 19 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
Aug 21 Python
Python实现滑动平均(Moving Average)的例子
Aug 24 Python
Django 解决distinct无法去除重复数据的问题
May 20 Python
将keras的h5模型转换为tensorflow的pb模型操作
May 25 Python
将tf.batch_matmul替换成tf.matmul的实现
Jun 18 Python
使用Python脚本对GiteePages进行一键部署的使用说明
May 27 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实现的mongodb操作类实例
2015/04/03 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
php中上传文件的的解决方案
2018/09/25 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
2019/11/04 PHP
Javascript 通过json自动生成Dom的代码
2010/04/01 Javascript
统计出现最多的字符次数的js代码
2010/12/03 Javascript
Javascript setInterval的两种调用方法(实例讲解)
2013/11/29 Javascript
JS 操作Array数组的方法及属性实例解析
2014/01/08 Javascript
kindeditor修复会替换script内容的问题
2015/04/03 Javascript
javascript实现下班倒计时效果的方法(可桌面通知)
2015/07/10 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
2015/12/19 Javascript
JS实现动态生成表格并提交表格数据向后端
2020/11/25 Javascript
利用js编写响应式侧边栏
2016/09/17 Javascript
js贪心算法 钱币找零问题代码实例
2019/09/11 Javascript
axios 实现post请求时把对象obj数据转为formdata
2019/10/31 Javascript
jquery获取input输入框中的值
2019/11/13 jQuery
微信小程序实现签字功能
2019/12/23 Javascript
原生js+canvas实现贪吃蛇效果
2020/08/02 Javascript
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
2021/01/28 Javascript
Python中用Descriptor实现类级属性(Property)详解
2014/09/18 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
2018/05/08 Python
Python2.7实现多进程下开发多线程示例
2019/05/31 Python
将Python文件打包成.EXE可执行文件的方法
2019/08/11 Python
Python hashlib模块加密过程解析
2019/11/05 Python
Pycharm安装Qt Design快捷工具的详细教程
2020/11/18 Python
python中numpy数组与list相互转换实例方法
2021/01/29 Python
京东港澳售:京东直邮港澳台
2018/01/31 全球购物
Bluebella美国官网:英国性感内衣品牌
2018/10/04 全球购物
实习护理工作自我评价
2013/09/25 职场文书
会计专业毕业生自我评价
2013/09/25 职场文书
毕业生求职简历的自我评价
2013/10/23 职场文书
入党思想汇报
2014/01/05 职场文书
个人工作主要事迹
2014/05/08 职场文书
幽灵公主观后感
2015/06/09 职场文书
婚宴致辞
2015/07/28 职场文书
初中政治教学工作总结
2015/08/13 职场文书