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处理文本文件中控制字符的方法
Feb 07 Python
Python列表切片用法示例
Apr 19 Python
详解Python nose单元测试框架的安装与使用
Dec 20 Python
Python发送邮件功能示例【使用QQ邮箱】
Dec 04 Python
python 删除字符串中连续多个空格并保留一个的方法
Dec 22 Python
值得收藏的10道python 面试题
Apr 15 Python
在keras中获取某一层上的feature map实例
Jan 24 Python
Python批量启动多线程代码实例
Feb 18 Python
django实现模板中的字符串文字和自动转义
Mar 31 Python
学python最电脑配置有要求么
Jul 05 Python
opencv 图像礼帽和图像黑帽的实现
Jul 07 Python
超详细Python解释器新手安装教程
May 10 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
MySQL数据源表结构图示
2008/06/05 PHP
PHP 正则判断中文UTF-8或GBK的思路及具体实现
2013/11/26 PHP
浅谈php命令行用法
2015/02/04 PHP
php求数组全排列,元素所有组合的方法
2016/05/05 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
Mozilla中显示textarea中选择的文字
2006/09/07 Javascript
Jquery 的扩展方法总结
2011/10/01 Javascript
jquery focus(fn),blur(fn)方法实例代码
2011/12/16 Javascript
裁剪字符串trim()自定义改进版
2013/04/10 Javascript
使用Nodejs开发微信公众号后台服务实例
2014/09/03 NodeJs
javascript比较两个日期相差天数的方法
2015/07/23 Javascript
源码分析Vue.js的监听实现教程
2017/04/23 Javascript
简单的网页广告特效实例
2017/08/19 Javascript
jQuery EasyUI 折叠面板accordion的使用实例(分享)
2017/12/25 jQuery
layerUI下的绑定事件实例代码
2018/08/17 Javascript
vue中v-text / v-html使用实例代码详解
2019/04/02 Javascript
简单的编程0基础下Python入门指引
2015/04/01 Python
python转换字符串为摩尔斯电码的方法
2015/07/06 Python
Python操作Excel之xlsx文件
2017/03/24 Python
浅谈Python 列表字典赋值的陷阱
2019/01/20 Python
Python自动化完成tb喵币任务的操作方法
2019/10/30 Python
python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案
2020/02/18 Python
Python如何基于Tesseract实现识别文字功能
2020/06/05 Python
美国排名第一的在线葡萄酒商店:Wine.com
2016/09/07 全球购物
2014年扶贫工作总结
2014/11/18 职场文书
少先队辅导员事迹材料
2014/12/24 职场文书
继承公证书格式
2015/01/26 职场文书
销售内勤岗位职责
2015/02/10 职场文书
2015大学自主招生自荐信范文
2015/03/04 职场文书
表扬信范文
2015/05/04 职场文书
信用卡催款律师函
2015/05/27 职场文书
用position:sticky完美解决小程序吸顶问题的实现方法
2021/04/24 HTML / CSS
Python中threading库实现线程锁与释放锁
2021/05/17 Python
pandas中DataFrame数据合并连接(merge、join、concat)
2021/05/30 Python