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使用循环实现批量创建文件夹示例
Mar 25 Python
python网络编程学习笔记(五):socket的一些补充
Jun 09 Python
Python中实现两个字典(dict)合并的方法
Sep 23 Python
Python构建XML树结构的方法示例
Jun 30 Python
在cmd中运行.py文件: python的操作步骤
May 12 Python
对python条件表达式的四种实现方法小结
Jan 30 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
Jan 20 Python
关于TensorFlow新旧版本函数接口变化详解
Feb 10 Python
python numpy--数组的组合和分割实例
Feb 24 Python
Flask和pyecharts实现动态数据可视化
Feb 26 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
Mar 27 Python
python读取xml文件方法解析
Aug 04 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
oracle资料库函式库
2006/10/09 PHP
PHP XML error parsing SOAP payload on line 1
2010/06/17 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
2014/06/26 PHP
PHP实现事件机制的方法
2015/07/10 PHP
基于php实现随机合并数组并排序(原排序)
2015/11/26 PHP
PHP实现链表的定义与反转功能示例
2018/06/09 PHP
CI框架网页缓存简单用法分析
2018/12/26 PHP
form中限制文本字节数js代码
2007/06/10 Javascript
js静态方法与实例方法分析
2011/07/04 Javascript
javascript中的=等号个数问题两个跟三个有什么区别
2013/10/23 Javascript
JS和函数式语言的三特性
2014/03/05 Javascript
javascript实现点击后变换按钮显示文字的方法
2015/05/13 Javascript
javascript实现获取浏览器版本、浏览器类型
2015/12/02 Javascript
node.js入门实例helloworld详解
2015/12/23 Javascript
input 禁止输入特殊字符的四种实现方式
2016/08/24 Javascript
node.js学习之base64编码解码
2016/10/21 Javascript
基于JQuery实现的跑马灯效果(文字无缝向上翻动)
2016/12/02 Javascript
jQuery内存泄露解决办法
2016/12/13 Javascript
基于Vue2的独立构建与运行时构建的差别(详解)
2017/12/06 Javascript
JavaScript实现数值自动增加动画
2017/12/28 Javascript
webpack+vuex+axios 跨域请求数据的示例代码
2018/03/06 Javascript
vue项目国际化vue-i18n的安装使用教程
2018/03/14 Javascript
为什么要使用Vuex的介绍
2019/01/19 Javascript
微信小程序仿抖音视频之整屏上下切换功能的实现代码
2020/05/24 Javascript
对Python中的@classmethod用法详解
2018/04/21 Python
selenium+python 去除启动的黑色cmd窗口方法
2018/05/22 Python
python保存数据到本地文件的方法
2018/06/23 Python
python使用minimax算法实现五子棋
2019/07/29 Python
医学护理系毕业生求职信
2013/10/01 职场文书
电子商务专业自我鉴定
2013/12/18 职场文书
护理专业毕业生自荐信范文
2014/01/05 职场文书
关于安全演讲稿
2014/05/09 职场文书
交警正风肃纪剖析材料
2014/10/29 职场文书
党的群众路线教育实践活动学习计划
2014/11/03 职场文书
拔河比赛队名及霸气口号
2015/12/24 职场文书
Windows Server 2012 修改远程默认端口3389的方法
2022/04/28 Servers