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实现list反转实例汇总
Nov 11 Python
python通过shutil实现快速文件复制的方法
Mar 14 Python
用ReactJS和Python的Flask框架编写留言板的代码示例
Dec 19 Python
python实现多线程抓取知乎用户
Dec 12 Python
利用python画一颗心的方法示例
Jan 31 Python
在centos7中分布式部署pyspider
May 03 Python
Python网络编程使用select实现socket全双工异步通信功能示例
Apr 09 Python
python中实现将多个print输出合成一个数组
Apr 19 Python
python消除序列的重复值并保持顺序不变的实例
Nov 08 Python
使用k8s部署Django项目的方法步骤
Jan 14 Python
python调用webservice接口的实现
Jul 12 Python
python3 简单实现组合设计模式
Jul 02 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将整个网站生成HTML纯静态网页的方法总结
2012/02/05 PHP
php 地区分类排序算法
2013/07/01 PHP
ThinkPHP表单数据智能写入create方法实例分析
2015/09/27 PHP
PHP HTTP 认证实例详解
2016/11/03 PHP
PHP基于Redis消息队列实现发布微博的方法
2017/05/03 PHP
Nigma vs Alliance BO5 第五场2.14
2021/03/10 DOTA
jquery tools 系列 scrollable(2)
2009/09/06 Javascript
详细讲解JS节点知识
2010/01/31 Javascript
用JavaScript计算在UTF-8下存储字符串占用字节数
2013/08/08 Javascript
JS替换字符串中字符即替换全部而不是第一个
2014/06/04 Javascript
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
2014/09/17 Javascript
jQuery搜索同辈元素方法
2015/02/10 Javascript
Javascript中判断对象是否为空
2015/06/10 Javascript
微信小程序之购物车功能
2020/09/23 Javascript
javascript回调函数的概念理解与用法分析
2017/05/27 Javascript
vue.js国际化 vue-i18n插件的使用详解
2017/07/07 Javascript
解析Vue.js中的组件
2018/02/02 Javascript
关于vuejs中v-if和v-show的区别及v-show不起作用问题
2018/03/26 Javascript
vue数据更新UI不刷新显示的解决办法
2020/08/06 Javascript
js异步接口并发数量控制的方法示例
2020/11/22 Javascript
用Python创建声明性迷你语言的教程
2015/04/13 Python
python中range()与xrange()用法分析
2016/09/21 Python
python opencv设置摄像头分辨率以及各个参数的方法
2018/04/02 Python
不知道这5种下划线的含义,你就不算真的会Python!
2018/10/09 Python
python常用函数与用法示例
2019/07/02 Python
django删除表重建的实现方法
2019/08/28 Python
基于Tensorflow使用CPU而不用GPU问题的解决
2020/02/07 Python
Python函数参数分类原理详解
2020/05/28 Python
英国大码女性时装零售商:Evans
2018/08/29 全球购物
校园报刊亭的创业计划书
2014/01/02 职场文书
学习与创新自我评价
2015/03/09 职场文书
离婚纠纷代理词
2015/05/23 职场文书
pytorch查看网络参数显存占用量等操作
2021/05/12 Python
Element实现动态表格的示例代码
2021/08/02 Javascript
WINDOWS下安装mysql 8.x 的方法图文教程
2022/04/19 MySQL
MySQL选择合适的备份策略和备份工具
2022/06/01 MySQL