Python采用socket模拟TCP通讯的实现方法


Posted in Python onNovember 19, 2014

本文实例讲述了Python采用socket模拟TCP通讯的实现方法。分享给大家供大家参考。具体实现方法如下:

对于TCP server端的创建而言,分为如下几个步骤:

创建socket对象(socket):其中两个参数分别为Address Family(如AF_INET为IPV4,AF_INET6为IPV6,AF_UNIX为UNIX域协议族)、socket类型(如SOCK_STREAM为TCP,SOCK_DGRAM为UDP)。

绑定服务器地址(bind):参数为服务器地址二元组。
监听(listen):参数为允许的连接数。
等待请求(accept)。
接收数据(recv、recvfrom、recvfrom_into、recv_into)、发送数据(send、sendall、sendto)。
关闭连接(close)。

示例代码如下:

Python socket: TCP server 

Python#! /usr/bin/python

# -*- coding: utf-8 -*-

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server_address = ('127.0.0.1', 12345)

print "Starting up on %s:%s" % server_address

sock.bind(server_address)

sock.listen(1)

while True:

    print "Waiting for a connection"

    connection, client_address = sock.accept()

    try:

        print "Connection from", client_address

        data = connection.recv(1024)

        print "Receive '%s'" % data

    finally:

        connection.close()

其中,服务器地址二元组中,第一个元素为服务器IP(留空为在任意IP监听),第二个元素为服务器端口号。

而对于TCP client而言,通常包括如下几个步骤:

创建socket对象(socket):同server端。
连接服务器(connect):参数为服务器地址二元组。
发送和接收数据:同server端。
关闭连接:同server端。

示例代码如下:

Python socket: TCP client 

Python# /usr/bin/python

# -*- coding: utf-8 -*-

import socket

def check_tcp_status(ip, port):

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    server_address = (ip, port)

    print 'Connecting to %s:%s.' % server_address

    sock.connect(server_address)

    message = "I'm TCP client"

    print 'Sending "%s".' % message

    sock.sendall(message)

    print 'Closing socket.'

    sock.close()
if __name__ == "__main__":

    print check_tcp_status("127.0.0.1", 12345)

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
浅析Python中return和finally共同挖的坑
Aug 18 Python
Python数据可视化教程之Matplotlib实现各种图表实例
Jan 13 Python
对Python定时任务的启动和停止方法详解
Feb 19 Python
Python中*args和**kwargs的区别详解
Sep 17 Python
python使用matplotlib绘制雷达图
Oct 18 Python
keras获得model中某一层的某一个Tensor的输出维度教程
Jan 24 Python
python如何通过twisted搭建socket服务
Feb 03 Python
jupyter notebook 添加kernel permission denied的操作
Apr 21 Python
爬虫代理的cookie如何生成运行
Sep 22 Python
pytorch 移动端部署之helloworld的使用
Oct 30 Python
python实现计算器简易版
Dec 17 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
Jan 28 Python
Python实现向QQ群成员自动发邮件的方法
Nov 19 #Python
python端口扫描系统实现方法
Nov 19 #Python
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
Nov 19 #Python
python中urllib模块用法实例详解
Nov 19 #Python
python统计一个文本中重复行数的方法
Nov 19 #Python
python通过zlib实现压缩与解压字符串的方法
Nov 19 #Python
python判断字符串是否纯数字的方法
Nov 19 #Python
You might like
YB217、YB235、YB400浅听
2021/03/02 无线电
PHP 七大优势分析
2009/06/23 PHP
PHP 变量定义和变量替换的方法
2009/07/30 PHP
ThinkPHP中Widget扩展的两种写法及调用方法详解
2017/05/04 PHP
对laravel的csrf 防御机制详解,及form中csrf_token()的存在介绍
2019/10/24 PHP
javascript实现TreeView 无刷新展开的实例代码
2013/07/13 Javascript
js中Math之random,round,ceil,floor的用法总结
2013/12/26 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
2013/12/31 Javascript
js创建对象的方式总结
2015/01/10 Javascript
jQuery入门基础知识学习指南
2015/08/14 Javascript
微信小程序 教程之wxapp视图容器 scroll-view
2016/10/19 Javascript
vuejs父子组件通信的问题
2017/01/11 Javascript
写jQuery插件时的注意点
2017/02/20 Javascript
node.js+captchapng+jsonwebtoken实现登录验证示例
2017/08/17 Javascript
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
vue form check 表单验证的实现代码
2018/12/09 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
2019/04/29 Javascript
如何在vue中使用jointjs过程解析
2020/05/29 Javascript
[05:53]敌法师的金色冠名ID"BurNIng",是传说,是荣耀
2020/07/11 DOTA
Python中特殊函数集锦
2015/07/27 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
2016/11/16 Python
Python基于回溯法子集树模板解决取物搭配问题实例
2017/09/02 Python
快速解决PyCharm无法引用matplotlib的问题
2018/05/24 Python
Python解决线性代数问题之矩阵的初等变换方法
2018/12/12 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
2019/03/22 Python
完美解决jupyter由于无法import新包的问题
2020/05/26 Python
python:删除离群值操作(每一行为一类数据)
2020/06/08 Python
Keras自定义IOU方式
2020/06/10 Python
pycharm导入源码的具体步骤
2020/08/04 Python
python实现简单文件读写函数
2021/02/25 Python
什么是makefile? 如何编写makefile?
2013/01/02 面试题
运动会的口号
2014/06/09 职场文书
天下第一关导游词
2015/02/06 职场文书
2015年小学生暑假总结
2015/07/13 职场文书
复制别人的成功真的会成功吗?
2019/10/17 职场文书
nginx配置之并发频次限制
2022/04/18 Servers