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网络编程之TCP通信实例和socketserver框架使用例子
Apr 25 Python
centos 下面安装python2.7 +pip +mysqld
Nov 18 Python
Python如何判断数独是否合法
Sep 08 Python
Python实现拷贝多个文件到同一目录的方法
Sep 19 Python
详谈套接字中SO_REUSEPORT和SO_REUSEADDR的区别
Apr 28 Python
python生成九宫格图片
Nov 19 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
Dec 10 Python
对python字典过滤条件的实例详解
Jan 22 Python
python-itchat 获取微信群用户信息的实例
Feb 21 Python
python检查目录文件权限并修改目录文件权限的操作
Mar 11 Python
python中lower函数实现方法及用法讲解
Dec 23 Python
使用豆瓣源来安装python中的第三方库方法
Jan 26 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文件的自动运行方法分析
2016/05/13 PHP
php 自定义错误日志实例详解
2016/11/12 PHP
php中bind_param()函数用法分析
2017/03/28 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
2019/04/10 PHP
JavaScript操纵窗口的方法小结
2013/06/28 Javascript
一个仿糯米弹框效果demo
2014/07/22 Javascript
AngularJS实现Model缓存的方式
2016/02/03 Javascript
jQuery插件HighCharts绘制的2D堆柱状图效果示例【附demo源码下载】
2017/03/14 Javascript
bootstrap table动态加载数据示例代码
2017/03/25 Javascript
Javascript继承机制详解
2017/05/30 Javascript
vue.js如何将echarts封装为组件一键使用详解
2017/10/10 Javascript
angularJS实现动态添加,删除div方法
2018/02/27 Javascript
Vue2.0实现组件数据的双向绑定问题
2018/03/06 Javascript
详解VUE调用本地json的使用方法
2019/05/15 Javascript
JavaScript冒泡算法原理与实现方法深入理解
2020/06/04 Javascript
js实现可爱的气泡特效
2020/09/05 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
Python制作CSDN免积分下载器
2015/03/10 Python
python Django框架实现自定义表单提交
2016/03/25 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
2018/02/18 Python
python中删除某个元素的方法解析
2019/11/05 Python
wxPython实现绘图小例子
2019/11/19 Python
python中count函数知识点浅析
2020/12/17 Python
Python创建自己的加密货币的示例
2021/03/01 Python
HTML5 localStorage使用总结
2017/02/22 HTML / CSS
英国电子产品购物网站:Tech in the basket
2019/11/08 全球购物
Why do we need Unit test
2013/01/03 面试题
医药代表个人的求职信分享
2013/12/08 职场文书
社区中秋节活动方案
2014/01/29 职场文书
有兼职工作经历的简历自我评价
2014/03/07 职场文书
马丁路德金演讲稿
2014/05/19 职场文书
工厂门卫的岗位职责
2014/07/27 职场文书
2014年路政工作总结
2014/12/10 职场文书
2015年药店工作总结
2015/04/20 职场文书
离职信范本
2015/06/23 职场文书
工程主管竞聘书
2015/09/15 职场文书