Python Socket实现简单TCP Server/client功能示例


Posted in Python onAugust 05, 2017

本文实例讲述了Python Socket实现简单TCP Server/client功能。分享给大家供大家参考,具体如下:

网络上关于socket的介绍文章数不胜数。自己记录下学习的点点滴滴。以供将来复习学习使用。

socket中文的翻译是套接字,总感觉词不达意。简单的理解就是ip+port形成的一个管理单元。也是程序中应用程序调用的接口。

在这里我们先介绍如何启动tcp 的server

tcp连接中server部分,启动一个ip和port口,在这个port口监听,当收到client发来的请求,用一个新的端口port2同client建立连接。

socket启动监听的过程就是:

创建socket
bind端口
开始监听
建立连接+继续监听

代码:

'''
This is a testing program
the program is used to start server
'''
import socket
import sys
def start_tcp_server(ip, port):
  #create socket
  sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  server_address = (ip, port)
  #bind port
  print 'starting listen on ip %s, port %s'%server_address
  sock.bind(server_address)
  #starting listening, allow only one connection
  try:
    sock.listen(1)
  except socket.error, e:
    print "fail to listen on port %s"%e
    sys.exit(1)
  while True:
    print "waiting for connection"
    client,addr = sock.accept()
    print 'having a connection'
    client.close()
if __name__ == '__main__':
  start_tcp_server('10.20.0.20', 12345)

在这里有一个常用技巧,在start_tcp_server中,我们最常用到的是本机的ip,为了程序的通用性,最好使用调用函数的方式获取ip地址。

用到两个函数socket.gethostnamesocket.gethostbyname('name')

ip = socket.gethostbyname(socket.gethostname())

但是问题是一般情况下得到的ip地址为127.0.0.1。

对于使用配置或dhcp获取的ip,可参考本站相关文章。

socket client 发起连接

流程为:

创建接口
发起连接
创建接口参数同socket server相同
发起连接的函数为socket.connect(ip,port)

这个地方的ip与port为socket server端的ip和监听port。

代码示例:

# -*- coding: utf-8 -*-
'''
This is a testing program
the program is used to test socket client
'''
import socket
import sys
def start_tcp_client(ip, port):
  #server port and ip
  server_ip = ip
  servr_port = port
  tcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  try:
    tcp_client.connect((server_ip, server_port))
  except socket.error:
    print 'fail to setup socket connection'
  tcp_client.close()

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

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

Python 相关文章推荐
Python实现的批量下载RFC文档
Mar 10 Python
python使用MySQLdb访问mysql数据库的方法
Aug 03 Python
Python文本相似性计算之编辑距离详解
Nov 28 Python
Python引用传值概念与用法实例小结
Oct 07 Python
用Django写天气预报查询网站
Oct 21 Python
python3编写ThinkPHP命令执行Getshell的方法
Feb 26 Python
python爬虫的一个常见简单js反爬详解
Jul 09 Python
Python PO设计模式的具体使用
Aug 16 Python
利用python实现冒泡排序算法实例代码
Dec 01 Python
Python处理mysql特殊字符的问题
Mar 02 Python
Python转换字典成为对象,可以用"."方式访问对象属性实例
May 11 Python
python相对企业语言优势在哪
Jun 12 Python
对pandas的dataframe绘图并保存的实现方法
Aug 05 #Python
解决PyCharm中光标变粗的问题
Aug 05 #Python
Python实现的中国剩余定理算法示例
Aug 05 #Python
python爬虫_自动获取seebug的poc实例
Aug 05 #Python
python中的break、continue、exit()、pass全面解析
Aug 05 #Python
Python基于递归算法实现的走迷宫问题
Aug 04 #Python
Python实现的科学计算器功能示例
Aug 04 #Python
You might like
星际RPG字典
2020/03/04 星际争霸
URL Rewrite的设置方法
2007/01/02 PHP
基于php iconv函数的使用详解
2013/06/09 PHP
PHP5.3新特性小结
2016/02/14 PHP
php封装json通信接口详解及实例
2017/03/07 PHP
Thinkphp5.0 框架实现控制器向视图view赋值及视图view取值操作示例
2019/10/12 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
2020/01/02 PHP
用jquery写的一个万年历(自写)
2014/01/20 Javascript
JS在可编辑的div中的光标位置插入内容的方法
2014/11/20 Javascript
Bootstrap Table的使用总结
2016/10/08 Javascript
vue-cli项目中怎么使用mock数据
2017/09/27 Javascript
vue中$refs的用法及作用详解
2018/04/24 Javascript
详解React 服务端渲染方案完美的解决方案
2018/12/14 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
2019/04/17 Javascript
解决使用layui的时候form表单中的select等不能渲染的问题
2019/09/18 Javascript
Vue+iview+webpack ie浏览器兼容简单处理
2019/09/20 Javascript
JavaScript 中的六种循环方法
2021/01/06 Javascript
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
Python中列表和元组的相关语句和方法讲解
2015/08/20 Python
Python中import导入上一级目录模块及循环import问题的解决
2016/06/04 Python
对TensorFlow的assign赋值用法详解
2018/07/30 Python
​如何愉快地迁移到 Python 3
2019/04/28 Python
Python+pyplot绘制带文本标注的柱状图方法
2019/07/08 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
2020/03/06 Python
css3新增颜色表示方式分享
2014/04/15 HTML / CSS
h5封装下拉刷新
2020/08/25 HTML / CSS
上海某公司.net方向笔试题
2014/09/14 面试题
优秀党支部书记事迹材料
2014/05/29 职场文书
幼儿园教师工作总结2015
2015/04/02 职场文书
工地材料员岗位职责
2015/04/11 职场文书
涨价通知怎么写
2015/04/23 职场文书
赡养老人协议书范本
2015/08/06 职场文书
2016预备党员培训心得体会
2016/01/08 职场文书
Flask搭建一个API服务器的步骤
2021/05/28 Python
python接口测试返回数据为字典取值方式
2022/02/12 Python
如何利用React实现图片识别App
2022/02/18 Javascript