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字符串编码识别模块chardet简单应用
Jun 15 Python
Python制作爬虫抓取美女图
Jan 20 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
May 26 Python
python简易实现任意位数的水仙花实例
Nov 13 Python
Python3.4学习笔记之列表、数组操作示例
Mar 01 Python
深入解析python中的实例方法、类方法和静态方法
Mar 11 Python
Django获取该数据的上一条和下一条方法
Aug 12 Python
浅谈tensorflow之内存暴涨问题
Feb 05 Python
PageFactory设计模式基于python实现
Apr 14 Python
在CentOS7下安装Python3教程解析
Jul 09 Python
django数据模型中null和blank的区别说明
Sep 02 Python
next在python中返回迭代器的实例方法
Dec 15 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
php session 预定义数组
2009/03/16 PHP
zen cart新进商品的随机排序修改方法
2010/09/10 PHP
用PHP实现小写金额转换大写金额的代码(精确到分)
2012/01/10 PHP
PHP语法小结之基础和变量
2015/11/22 PHP
PHP实现基于mysqli的Model基类完整实例
2016/04/08 PHP
php 获取文件行数的方法总结
2016/10/11 PHP
YII2框架中查询生成器Query()的使用方法示例
2020/03/18 PHP
JQuery Study Notes 学习笔记(一)
2010/08/04 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
2015/02/26 Javascript
JavaScript将数字转换成大写中文的方法
2015/03/23 Javascript
jquery easyui validatebox remote的使用详解
2016/11/09 Javascript
ThinkPHP+jquery实现“加载更多”功能代码
2017/03/11 Javascript
关于angularJs清除浏览器缓存的方法
2017/11/28 Javascript
vue的toast弹窗组件实例详解
2018/05/14 Javascript
详解webpack的proxyTable无效的解决方案
2018/06/15 Javascript
vue实现自定义多选与单选的答题功能
2018/07/05 Javascript
小程序实现单选多选功能
2018/11/04 Javascript
小程序异步问题之多个网络请求依次执行并依次收集请求结果
2019/05/05 Javascript
vue+koa2搭建mock数据环境的详细教程
2020/05/18 Javascript
JS PHP字符串截取函数实现原理解析
2020/08/29 Javascript
[01:35]辉夜杯战队访谈宣传片—iG.V
2015/12/25 DOTA
Python3遍历目录树实现方法
2015/05/22 Python
Python赋值语句后逗号的作用分析
2015/06/08 Python
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
2017/06/07 Python
Python快速查找list中相同部分的方法
2018/06/27 Python
numpy中loadtxt 的用法详解
2018/08/03 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
2020/05/15 Python
如何让IE9以下版本(ie6/7/8)认识html5元素
2013/04/01 HTML / CSS
小学开学寄语
2014/01/19 职场文书
优秀团员自我评价
2015/03/10 职场文书
2015暑假假期总结
2015/07/13 职场文书
初中毕业感言300字
2015/07/31 职场文书
关于教师节的广播稿
2015/08/19 职场文书
MySQL分区表实现按月份归类
2021/11/01 MySQL
Element-ui Layout布局(Row和Col组件)的实现
2021/12/06 Vue.js