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实现线程池代码分享
Jun 21 Python
使用python爬虫实现网络股票信息爬取的demo
Jan 05 Python
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
May 11 Python
解决每次打开pycharm直接进入项目的问题
Oct 28 Python
一篇文章了解Python中常见的序列化操作
Jun 20 Python
python实现多线程端口扫描
Aug 31 Python
python tkinter组件使用详解
Sep 16 Python
python线程安全及多进程多线程实现方法详解
Sep 27 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
Nov 16 Python
Python文本处理简单易懂方法解析
Dec 19 Python
基于python实现计算且附带进度条代码实例
Mar 31 Python
解决python对齐错误的方法
Jul 16 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
PHP4实际应用经验篇(4)
2006/10/09 PHP
使用php清除bom示例
2014/03/03 PHP
php中删除数组的第一个元素和最后一个元素的函数
2015/03/07 PHP
php实现只保留mysql中最新1000条记录
2015/06/18 PHP
详解HTTP Cookie状态管理机制
2016/01/14 PHP
Yii视图操作之自定义分页实现方法
2016/07/14 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
如何在PHP环境中使用ProtoBuf数据格式
2020/06/19 PHP
jQueryUI如何自定义组件实现代码
2010/11/14 Javascript
原生javascript实现的分页插件pagenav
2014/08/28 Javascript
Javascript无参数和有参数类继承问题解决方法
2015/03/02 Javascript
js实现仿百度风云榜可重复多次调用的TAB切换选项卡效果
2015/08/31 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
2016/03/11 Javascript
JS正则表达式之非捕获分组用法实例分析
2016/12/28 Javascript
jQuery获取table下某一行某一列的值实现代码
2017/04/07 jQuery
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
Vue.js对象转换实例
2017/06/07 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
2019/01/24 Javascript
JQuery获取元素尺寸、位置及页面滚动事件应用示例
2019/05/14 jQuery
[53:10]Secret vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python类定义的讲解
2013/11/01 Python
浅析Python中return和finally共同挖的坑
2017/08/18 Python
python利用smtplib实现QQ邮箱发送邮件
2020/05/20 Python
对python中 math模块下 atan 和 atan2的区别详解
2020/01/17 Python
Python要如何实现列表排序的几种方法
2020/02/21 Python
大专毕业生自我鉴定
2013/11/21 职场文书
投标邀请书范文
2014/01/31 职场文书
机械制造毕业生求职信
2014/03/03 职场文书
《分一分》教学反思
2014/04/13 职场文书
质量承诺书格式
2014/05/20 职场文书
南京导游词
2015/02/03 职场文书
工程质量保证书
2015/05/09 职场文书
环保建议书作文500字
2015/09/14 职场文书
优秀团员主要事迹材料
2015/11/05 职场文书
介绍信应该怎么开?
2019/04/03 职场文书
15个值得收藏的JavaScript函数
2021/09/15 Javascript