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抓取百度查询结果的方法
Jul 08 Python
Python实现列表转换成字典数据结构的方法
Mar 11 Python
python 实现一个贴吧图片爬虫的示例
Oct 12 Python
Python实现的json文件读取及中文乱码显示问题解决方法
Aug 06 Python
Python爬虫小技巧之伪造随机的User-Agent
Sep 13 Python
用于业余项目的8个优秀Python库
Sep 21 Python
Python编程深度学习计算库之numpy
Dec 28 Python
python 读取鼠标点击坐标的实例
Dec 29 Python
Python实现动态给类和对象添加属性和方法操作示例
Feb 29 Python
opencv python在视屏上截图功能的实现
Mar 05 Python
Django修改app名称和数据表迁移方案实现
Sep 17 Python
jupyter使用自动补全和切换默认浏览器的方法
Nov 18 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读取PDF内容配合Xpdf的使用
2012/11/24 PHP
php中的PHP_EOL换行符详细解析
2013/10/26 PHP
xss防御之php利用httponly防xss攻击
2014/03/21 PHP
CI(CodeIgniter)框架中的增删改查操作
2014/06/10 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
2014/07/30 PHP
PHP中new static() 和 new self() 的区别介绍
2015/01/09 PHP
php+xml编程之SimpleXML的应用实例
2015/01/24 PHP
PHP实现QQ空间自动回复说说的方法
2015/12/02 PHP
In Javascript Class, how to call the prototype method.(three method)
2007/01/09 Javascript
JavaScript 应用技巧集合[推荐]
2009/08/30 Javascript
TypeError document.getElementById(...) is null错误原因
2015/05/18 Javascript
Javascript实现的Map集合工具类完整实例
2015/07/31 Javascript
JavaScript实现的多个图片广告交替显示效果代码
2015/09/04 Javascript
学习JavaScript设计模式(多态)
2015/11/25 Javascript
javascript性能优化之DOM交互操作实例分析
2015/12/12 Javascript
js+html5操作sqlite数据库的方法
2016/02/02 Javascript
Bootstrap CSS布局之表格
2016/12/17 Javascript
使用 Node.js 模拟滑动拼图验证码操作的示例代码
2017/11/02 Javascript
解决vue build打包之后首页白屏的问题
2018/03/06 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
2018/08/19 Javascript
Node+OCR实现图像文字识别功能
2018/11/26 Javascript
ES6知识点整理之函数数组参数的默认值及其解构应用示例
2019/04/17 Javascript
p5.js绘制创意自画像
2019/11/04 Javascript
js+html+css实现手动轮播和自动轮播
2020/12/30 Javascript
Python实现对excel文件列表值进行统计的方法
2015/07/25 Python
python写入已存在的excel数据实例
2018/05/03 Python
Python爬虫常用小技巧之设置代理IP
2018/09/13 Python
python:动态路由的Flask程序代码
2019/11/22 Python
Pytorch 的损失函数Loss function使用详解
2020/01/02 Python
HTML5的结构和语义(5):内嵌媒体
2008/10/17 HTML / CSS
Canvas图片分割效果的实现
2019/07/29 HTML / CSS
Priority Pass机场贵宾室会籍计划:全球超过1200间机场贵宾室
2018/08/26 全球购物
安全责任书怎么写
2014/07/28 职场文书
幼儿园大班开学寄语(2015秋季)
2015/05/27 职场文书
幼儿园小班教师随笔
2015/08/14 职场文书
Python中json.load()和json.loads()有哪些区别
2021/06/07 Python