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 strip()函数 介绍
May 24 Python
Python的函数嵌套的使用方法
Jan 24 Python
Python3中的列表,元组,字典,字符串相关知识小结
Nov 10 Python
Python基于socket模块实现UDP通信功能示例
Apr 10 Python
python线程池threadpool实现篇
Apr 27 Python
python用列表生成式写嵌套循环的方法
Nov 08 Python
浅谈python3.x pool.map()方法的实质
Jan 16 Python
Python使用itchat 功能分析微信好友性别和位置
Aug 05 Python
Python 面向对象之类class和对象基本用法示例
Feb 02 Python
在Django中预防CSRF攻击的操作
Mar 13 Python
python中setuptools的作用是什么
Jun 19 Python
Python使用urlretrieve实现直接远程下载图片的示例代码
Aug 17 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 闭包特性在实际应用中的问题
2009/10/30 PHP
在PHP中使用curl_init函数的说明
2010/11/02 PHP
php中设置多级目录session的问题
2011/08/08 PHP
提高php运行速度的一些小技巧分享
2012/07/03 PHP
destoon安装出现Internal Server Error的解决方法
2014/06/21 PHP
PHP简单判断手机设备的方法
2016/08/23 PHP
php实现base64图片上传方式实例代码
2017/02/22 PHP
Laravel下生成验证码的类
2017/11/15 PHP
详解PHP 7.4 中数组延展操作符语法知识点
2019/07/19 PHP
PHP递归统计系统中代码行数
2019/09/19 PHP
随机显示经典句子或诗歌的javascript脚本
2007/08/04 Javascript
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
jquery ajax 局部刷新小案例
2014/02/08 Javascript
如何将网页表格内容导入excel
2014/02/18 Javascript
Javascript中的异步编程规范Promises/A详细介绍
2014/06/06 Javascript
项目中常用的JS方法整理
2015/01/30 Javascript
完美实现js选项卡切换效果(一)
2017/03/08 Javascript
基于AngularJS的简单使用详解
2017/09/10 Javascript
AngularJS实现表单验证功能详解
2017/10/12 Javascript
利用原生的JavaScript实现简单拼图游戏
2018/11/18 Javascript
JavaScript计算出两个数的差值
2020/03/19 Javascript
[54:54]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python开发的小球完全弹性碰撞游戏代码
2013/10/15 Python
Python实现全局变量的两个解决方法
2014/07/03 Python
python numpy和list查询其中某个数的个数及定位方法
2018/06/27 Python
Python递归函数实例讲解
2019/02/27 Python
Python filter()及reduce()函数使用方法解析
2020/09/05 Python
10张动图学会python循环与递归问题
2021/02/06 Python
详解HTML5中CSS外观属性
2020/09/10 HTML / CSS
国际知名设计师时装商店:Coggles
2016/09/05 全球购物
KIKO MILANO英国官网:意大利知名化妆品和护肤品品牌
2017/09/25 全球购物
Miller Harris官网:英国小众香水品牌
2020/09/24 全球购物
先进班级集体事迹材料
2014/01/30 职场文书
机关作风建设工作总结
2014/10/23 职场文书
Java实现多文件上传功能
2021/06/30 Java/Android
python not运算符的实例用法
2021/06/30 Python