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实现将绝对URL替换成相对URL的方法
Jun 28 Python
scrapy spider的几种爬取方式实例代码
Jan 25 Python
Django实现全文检索的方法(支持中文)
May 14 Python
Python识别快递条形码及Tesseract-OCR使用详解
Jul 15 Python
Python线上环境使用日志的及配置文件
Jul 28 Python
selenium2.0中常用的python函数汇总
Aug 05 Python
Python使用正则实现计算字符串算式
Dec 29 Python
执行Python程序时模块报错问题
Mar 26 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
Apr 16 Python
浅谈Python 函数式编程
Jun 20 Python
Python3爬虫中pyspider的安装步骤
Jul 29 Python
python实现文件分片上传的接口自动化
Nov 19 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
第十四节--命名空间
2006/11/16 PHP
CI框架开发新浪微博登录接口源码完整版
2014/05/28 PHP
ThinkPHP之getField详解
2014/06/20 PHP
thinkphp关于简单的权限判定方法
2017/04/03 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
JS分割字符串并放入数组的函数
2011/07/04 Javascript
JavaScript单元测试ABC
2012/04/12 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
SeaJS 与 RequireJS 的差异对比
2014/12/08 Javascript
简单实现js间歇或无缝滚动效果
2016/06/29 Javascript
javaScript如何跳出多重循环break、continue
2016/09/01 Javascript
seajs模块之间依赖的加载以及模块的执行
2016/10/21 Javascript
Bootstrap风格的zTree右键菜单
2017/02/17 Javascript
vue2.0获取自定义属性的值
2017/03/28 Javascript
简单实现JavaScript弹幕效果
2020/08/27 Javascript
浅谈JavaScript中你可能不知道URL构造函数的属性
2020/07/13 Javascript
Vue 根据条件判断van-tab的显示方式
2020/08/03 Javascript
jquery自定义组件实例详解
2020/12/31 jQuery
python 获取文件列表(或是目录例表)
2009/03/25 Python
python中学习K-Means和图片压缩
2017/11/20 Python
微信跳一跳python辅助软件思路及图像识别源码解析
2018/01/04 Python
python实现数据写入excel表格
2018/03/25 Python
django 解决manage.py migrate无效的问题
2018/05/27 Python
深入flask之异步非堵塞实现代码示例
2018/07/31 Python
pandas 层次化索引的实现方法
2019/07/06 Python
Python时间差中seconds和total_seconds的区别详解
2019/12/26 Python
python3中for循环踩过的坑记录
2020/12/14 Python
世界上最具创新性的增强型知名运动品牌:Proviz
2018/04/03 全球购物
会计职业生涯规划范文
2014/01/04 职场文书
先进班级集体事迹材料
2014/01/30 职场文书
迟到检讨书500字
2014/02/05 职场文书
三爱活动实施方案
2014/03/19 职场文书
2014年化验员工作总结
2014/11/18 职场文书
军训新闻稿范文
2015/07/17 职场文书
25句企业管理语录:助你迅速打开思路,句句经典!
2020/01/14 职场文书
纯CSS打字动画的实现示例
2022/08/05 HTML / CSS