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 相关文章推荐
Tornado服务器中绑定域名、虚拟主机的方法
Aug 22 Python
Python使用scrapy采集数据过程中放回下载过大页面的方法
Apr 08 Python
Python argv用法详解
Jan 08 Python
详解Python中的相对导入和绝对导入
Jan 06 Python
Django中redis的使用方法(包括安装、配置、启动)
Feb 21 Python
Python SQLite3简介
Feb 22 Python
tensorflow获取变量维度信息
Mar 10 Python
Python操作mongodb数据库进行模糊查询操作示例
Jun 09 Python
Python中的 sort 和 sorted的用法与区别
Aug 10 Python
python实现PCA降维的示例详解
Feb 24 Python
pycharm无法导入lxml的解决办法
Mar 31 Python
Python基础详解之邮件处理
Apr 28 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将mysql数据库整库导出生成sql文件的具体实现
2014/01/08 PHP
php中的静态变量的基本用法
2014/03/20 PHP
laravel 实现划分admin和home 模块分组
2019/10/15 PHP
Prototype Object对象 学习
2009/07/12 Javascript
Javascript 判断函数类型完美解决方案
2009/09/02 Javascript
javascript 一些用法小结
2009/09/11 Javascript
javascript数字数组去重复项的实现代码
2010/12/30 Javascript
jQuery图片预加载 等比缩放实现代码
2011/10/04 Javascript
Function.prototype.call.apply结合用法分析示例
2013/07/03 Javascript
论Bootstrap3和Foundation5网格系统的异同
2016/05/16 Javascript
node.js中的事件处理机制详解
2016/11/26 Javascript
Vue2.x中的Render函数详解
2017/05/30 Javascript
微信小程序实现顶部下拉菜单栏
2018/11/04 Javascript
layui禁用侧边导航栏点击事件的解决方法
2019/09/25 Javascript
[00:49]完美世界DOTA2联赛10月28日开团时刻:随便打
2020/10/29 DOTA
详解Python编程中对Monkey Patch猴子补丁开发方式的运用
2016/05/27 Python
[原创]Python入门教程4. 元组基本操作
2018/10/31 Python
python自动化之Ansible的安装教程
2019/06/13 Python
Win10里python3创建虚拟环境的步骤
2020/01/31 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
2020/02/27 Python
基于PyQT实现区分左键双击和单击
2020/05/19 Python
Pycharm配置lua编译环境过程图解
2020/11/28 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
2020/12/10 Python
Python 中 sorted 如何自定义比较逻辑
2021/02/02 Python
印度在线购物网站:Paytmmall
2019/07/24 全球购物
JavaScript实现页面动态验证码的实现示例
2021/03/23 Javascript
农业资源与环境专业自荐信范文
2013/12/30 职场文书
CAD制图人员的自荐信
2014/02/07 职场文书
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
大学生党员承诺书
2014/05/20 职场文书
大跃进口号
2014/06/16 职场文书
党员国庆节演讲稿范文2014
2014/09/21 职场文书
贵阳市党的群众路线教育实践活动党(工)委领导班子整改方案
2014/10/26 职场文书
班级元旦晚会开幕词
2015/01/29 职场文书
重阳节慰问信
2015/02/15 职场文书
宾馆前台接待岗位职责
2015/04/02 职场文书