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 29 Python
Python自动化运维和部署项目工具Fabric使用实例
Sep 18 Python
Django1.7+python 2.78+pycharm配置mysql数据库
Oct 09 Python
python dict 字典 以及 赋值 引用的一些实例(详解)
Jan 20 Python
python学习笔记之列表(list)与元组(tuple)详解
Nov 23 Python
Python编程中flask的简介与简单使用
Dec 28 Python
Python计算时间间隔(精确到微妙)的代码实例
Feb 26 Python
python 字典访问的三种方法小结
Dec 05 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
Jan 10 Python
python中pdb模块实例用法
Jan 15 Python
Python django中如何使用restful框架
Jun 23 Python
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
Mar 03 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
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
无限级别菜单的实现
2006/10/09 PHP
php csv操作类代码
2009/12/14 PHP
yii框架搜索分页modle写法
2016/12/19 PHP
jquery获取input的value问题说明
2010/08/19 Javascript
基于JQuery的浮动DIV显示提示信息并自动隐藏
2011/02/11 Javascript
让jQuery Mobile不显示讨厌loading界面的方法
2014/02/19 Javascript
Javascript中的arguments与重载介绍
2015/03/15 Javascript
JavaScript实现信用卡校验方法
2015/04/07 Javascript
js实现n秒倒计时后才可以点击的效果
2015/12/20 Javascript
Angular 页面跳转时传参问题
2016/08/01 Javascript
JS获取一个未知DIV高度的方法
2016/08/09 Javascript
Bootstrap模态框使用详解
2017/02/15 Javascript
jquery实现图片放大点击切换
2017/06/06 jQuery
jQuery实现简单的手风琴效果
2020/04/17 jQuery
浅谈vue单一组件下动态修改数据时的全部重渲染
2018/03/01 Javascript
layui实现数据表格table分页功能(ajax异步)
2019/07/27 Javascript
layui动态渲染生成左侧3级菜单的方法(根据后台返回数据)
2019/09/23 Javascript
使用uni-app开发微信小程序的实现
2019/12/13 Javascript
JS前后端实现身份证号验证代码解析
2020/07/23 Javascript
Python3基础之基本运算符概述
2014/08/13 Python
python格式化字符串实例总结
2014/09/28 Python
最基础的Python的socket编程入门教程
2015/04/23 Python
python django事务transaction源码分析详解
2017/03/17 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
2018/02/26 Python
python 实现一次性在文件中写入多行的方法
2019/01/28 Python
关于Python3 lambda函数的深入浅出
2019/11/27 Python
Python代码一键转Jar包及Java调用Python新姿势
2020/03/10 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
2020/07/28 Python
表单button的outline在firefox浏览器下的问题
2012/12/24 HTML / CSS
教师的实习鉴定
2013/12/15 职场文书
优秀教师演讲稿
2014/05/06 职场文书
2014年医生工作总结
2014/11/21 职场文书
运动会开幕式致辞
2015/07/29 职场文书
Python Pytorch查询图像的特征从集合或数据库中查找图像
2022/04/09 Python
如何利用python实现Simhash算法
2022/06/28 Python