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(4)
Sep 28 Python
简单介绍Python中的readline()方法的使用
May 24 Python
Python中的getopt函数使用详解
Jul 28 Python
python实现分页效果
Oct 25 Python
Python温度转换实例分析
Jan 17 Python
python面试题Python2.x和Python3.x的区别
May 28 Python
python实现最大优先队列
Aug 29 Python
Django实现网页分页功能
Oct 31 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
Dec 02 Python
Python字符串hashlib加密模块使用案例
Mar 10 Python
Python 解决空列表.append() 输出为None的问题
May 23 Python
python读取并查看npz/npy文件数据以及数据显示方法
Apr 14 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单例模式详细介绍
2015/07/01 PHP
php实现源代码加密的方法
2015/07/11 PHP
开启PHP Static 关键字之旅模式
2015/11/13 PHP
IE与firefox之jquery用法区别
2008/10/03 Javascript
五个jQuery图片画廊插件 推荐
2011/05/12 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
2015/08/08 Javascript
Json按某个键的值进行排序
2016/12/22 Javascript
Angular2使用Guard和Resolve进行验证和权限控制
2017/04/24 Javascript
原生JS+Canvas实现五子棋游戏实例
2017/06/19 Javascript
JS实现提交表单前的数字及邮箱校检功能
2017/11/13 Javascript
微信小程序实现文字无限轮播效果
2018/12/28 Javascript
vue中过滤器filter的讲解
2019/01/21 Javascript
vue中使用微信公众号js-sdk踩坑记录
2019/03/29 Javascript
微信小程序实现传递多个参数与事件处理
2019/08/12 Javascript
使用vue编写h5公众号跳转小程序的实现代码
2020/11/27 Vue.js
使用Python下载Bing图片(代码)
2013/11/07 Python
Python实现TCP/IP协议下的端口转发及重定向示例
2016/06/14 Python
python调用Matplotlib绘制分布点并且添加标签
2018/05/31 Python
python实现下载pop3邮件保存到本地
2018/06/19 Python
Python 删除整个文本中的空格,并实现按行显示
2018/07/24 Python
python实现AES加密与解密
2019/03/28 Python
python入门之基础语法学习笔记
2020/02/08 Python
如何使用pandas读取txt文件中指定的列(有无标题)
2020/03/05 Python
Python调用C语言程序方法解析
2020/07/07 Python
Python 通过正则表达式快速获取电影的下载地址
2020/08/17 Python
利用HTML5绘制点线面组成的3D图形的示例
2015/05/12 HTML / CSS
Omio英国:搜索并比较便宜的巴士、火车和飞机
2019/08/27 全球购物
科颜氏香港官方网店:Kiehl’s香港
2021/03/07 全球购物
进口业务员岗位职责
2014/04/06 职场文书
机械系毕业生求职信
2014/05/28 职场文书
领导干部对照检查材料
2014/08/24 职场文书
工作保证书怎么写
2015/02/28 职场文书
自我工作评价范文
2015/03/06 职场文书
二审答辩状范文
2015/05/22 职场文书
运动会跳远广播稿
2015/08/19 职场文书
python 使用tkinter与messagebox写界面和弹窗
2022/03/20 Python