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的tkinter布局之简单的聊天窗口实现方法
Sep 03 Python
python基础教程之分支、循环简单用法
Jun 16 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
May 19 Python
Python原始字符串与Unicode字符串操作符用法实例分析
Jul 22 Python
利用Python如何生成便签图片详解
Jul 09 Python
Python多线程处理实例详解【单进程/多进程】
Jan 30 Python
解决Python使用列表副本的问题
Dec 19 Python
python十进制转二进制的详解
Feb 07 Python
解决tensorflow读取本地MNITS_data失败的原因
Jun 22 Python
Python GUI库Tkiner使用方法代码示例
Nov 27 Python
Python 可视化神器Plotly详解
Dec 26 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
Jan 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
点评山进PR-D3L三波段收音机
2021/03/02 无线电
Discuz 模板语句分析及知识技巧
2009/08/21 PHP
mysql 查询指定日期时间内sql语句实现原理与代码
2012/12/16 PHP
PHP实现搜索相似图片
2015/09/22 PHP
php的闭包(Closure)匿名函数初探
2016/02/14 PHP
PHP 的比较运算与逻辑运算详解
2016/05/12 PHP
PHP后期静态绑定之self::限制实例分析
2018/12/21 PHP
PHP实现本地图片转base64格式并上传
2020/05/29 PHP
漂亮的提示信息(带箭头)
2007/03/21 Javascript
深入解析contentWindow, contentDocument
2013/07/04 Javascript
javascript中定义私有方法说明(private method)
2014/01/27 Javascript
jQuery大于号(>)选择器的作用解释
2015/01/13 Javascript
浅谈JavaScript异步编程
2017/01/20 Javascript
jQuery自定义图片上传插件实例代码
2017/04/04 jQuery
解决Vue-cli3没有vue.config.js文件夹及配置vue项目域名的问题
2020/12/04 Vue.js
[02:32]“虐狗”镜头慎点 2016国际邀请赛中国区预选赛现场玩家采访
2016/06/28 DOTA
用Python进行一些简单的自然语言处理的教程
2015/03/31 Python
在Django中创建URLconf相关的通用视图的方法
2015/07/20 Python
python 创建弹出式菜单的实现代码
2017/07/11 Python
基于Python和Scikit-Learn的机器学习探索
2017/10/16 Python
Django原生sql也能使用Paginator分页的示例代码
2017/11/15 Python
Python语言生成水仙花数代码示例
2017/12/18 Python
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
pyspark 读取csv文件创建DataFrame的两种方法
2018/06/07 Python
python实现微信定时每天和女友发送消息
2019/04/29 Python
django之对FileField字段的upload_to的设定方法
2019/07/28 Python
利用HTML5+css3+jquery+weui实现仿微信聊天界面功能
2018/01/08 HTML / CSS
家庭户外服装:Hawkshead
2017/11/02 全球购物
戴尔美国官方折扣店:Dell Outlet
2018/02/13 全球购物
英国景点门票网站:attractiontix
2019/08/27 全球购物
澳大利亚最大的护发和护肤品购物网站:RY
2019/12/26 全球购物
《胖乎乎的小手》教学反思
2014/02/26 职场文书
2014年校务公开工作总结
2014/12/18 职场文书
汽车转让协议书
2015/01/29 职场文书
2016年感恩教师节校园广播稿
2015/12/18 职场文书
解决golang在import自己的包报错的问题
2021/04/29 Golang