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 学习笔记
Dec 27 Python
在windows下快速搭建web.py开发框架方法
Apr 22 Python
深入理解NumPy简明教程---数组3(组合)
Dec 17 Python
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
Jun 20 Python
浅谈Python中range和xrange的区别
Dec 20 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
Jul 22 Python
Python实现投影法分割图像示例(二)
Jan 17 Python
tensorflow 实现数据类型转换
Feb 17 Python
Pytest参数化parametrize使用代码实例
Feb 22 Python
python数据库编程 Mysql实现通讯录
Mar 27 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
Jan 29 Python
Python采集爬取京东商品信息和评论并存入MySQL
Apr 12 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
用 PHP5 轻松解析 XML
2006/12/04 PHP
PHP 抓取新浪读书频道的小说并生成txt电子书的代码
2009/12/18 PHP
php防注入及开发安全详细解析
2013/08/09 PHP
php分页原理 分页代码 分页类制作教程
2016/09/23 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
2017/02/15 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
PHP+redis实现微博的推模型案例分析
2019/07/10 PHP
javascript iframe内的函数调用实现方法
2009/07/19 Javascript
IE与Firefox在JavaScript上的7个不同句法分享
2011/10/30 Javascript
js获取IFRAME当前的URL的方法
2013/11/13 Javascript
在 Express 中使用模板引擎
2015/12/10 Javascript
浅谈JS使用[ ]来访问对象属性
2016/09/21 Javascript
微信小程序 Tab页切换更新数据
2017/01/05 Javascript
Angular.JS去掉访问路径URL中的#号详解
2017/03/30 Javascript
jquery实现倒计时小应用
2017/09/19 jQuery
vue-cli2.9.3 详细教程
2018/04/23 Javascript
vue mint-ui tabbar变组件使用
2018/05/04 Javascript
Vue.set() this.$set()引发的视图更新思考及注意事项
2018/08/30 Javascript
[04:27]DOTA2官方论坛水友赛集锦
2013/09/16 DOTA
如何在sae中设置django,让sae的工作环境跟本地python环境一致
2017/11/21 Python
python中字符串比较使用is、==和cmp()总结
2018/03/18 Python
PyQt5每天必学之拖放事件
2020/08/27 Python
在双python下设置python3为默认的方法
2018/10/31 Python
python 不同方式读取文件速度不同的实例
2018/11/09 Python
基于Python 中函数的 收集参数 机制
2019/12/21 Python
python剪切视频与合并视频的实现
2020/03/03 Python
英国殿堂级有机护肤品牌:Rodial
2017/04/17 全球购物
俄罗斯最大的消费电子连锁零售商:Mvideo
2017/06/25 全球购物
会计毕业生自荐信
2013/11/21 职场文书
个人自荐材料
2014/05/23 职场文书
2015年安全生产目标责任书
2015/01/29 职场文书
故宫的导游词
2015/01/31 职场文书
家装电话营销开场白
2015/05/29 职场文书
课题研究阶段性总结
2015/08/13 职场文书
分析JVM源码之Thread.interrupt系统级别线程打断
2021/06/29 Java/Android
阿里云服务器部署mongodb的详细过程
2021/09/04 MongoDB