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 相关文章推荐
pymongo为mongodb数据库添加索引的方法
May 11 Python
python中常用的九种预处理方法分享
Sep 11 Python
python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解
Nov 08 Python
python贪婪匹配以及多行匹配的实例讲解
Apr 19 Python
Django实现全文检索的方法(支持中文)
May 14 Python
基于python 微信小程序之获取已存在模板消息列表
Aug 05 Python
python使用itchat模块给心爱的人每天发天气预报
Nov 25 Python
Python数据可视化:顶级绘图库plotly详解
Dec 07 Python
opencv 图像腐蚀和图像膨胀的实现
Jul 07 Python
tensorflow基于CNN实战mnist手写识别(小白必看)
Jul 20 Python
如何利用opencv判断两张图片是否相同详解
Jul 07 Python
一篇文章搞懂python混乱的切换操作与优雅的推导式
Aug 23 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
一个用于mysql的数据库抽象层函数库
2006/10/09 PHP
解析php5配置使用pdo
2013/07/03 PHP
PHP实现图片裁剪、添加水印效果代码
2014/10/01 PHP
PHP获取文件夹内文件数的方法
2015/03/12 PHP
php简单实现发送带附件的邮件
2015/06/10 PHP
深入解析PHP的Laravel框架中的event事件操作
2016/03/21 PHP
PHP实现二维数组按某列进行排序的方法
2016/11/18 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
JS+ACTIVEX实现网页选择本地目录路径对话框
2013/03/18 Javascript
jquery的选择器的使用技巧之如何选择input框
2013/09/22 Javascript
用jQuery toggleClass 实现鼠标移上变色
2014/05/14 Javascript
Javascript原型链和原型的一个误区
2014/10/22 Javascript
如何高效率去掉js数组中的重复项
2016/04/12 Javascript
微信小程序 基础组件与导航组件详细介绍
2017/02/21 Javascript
JS 调试中常见的报错问题解决方法
2017/05/20 Javascript
5分钟学会Vue动画效果(小结)
2018/07/21 Javascript
15 分钟掌握vue-next响应式原理
2019/10/13 Javascript
vue图片上传组件使用详解
2019/12/23 Javascript
Vuex模块化应用实践示例
2020/02/03 Javascript
JavaScript实现简单日历效果
2020/09/11 Javascript
Python中序列的修改、散列与切片详解
2017/08/27 Python
python3实现windows下同名进程监控
2018/06/21 Python
Python爬虫框架Scrapy基本用法入门教程
2018/07/26 Python
python装饰器简介---这一篇也许就够了(推荐)
2019/04/01 Python
Python Django框架单元测试之文件上传测试示例
2019/05/17 Python
Jacobi迭代算法的Python实现详解
2019/06/29 Python
HTML table 表格边框的实现思路
2019/10/12 HTML / CSS
AE美国鹰美国官方网站:American Eagle Outfitters
2016/08/22 全球购物
英国领先的杂志订阅网站:Magazine.co.uk
2018/01/25 全球购物
汽车维修与检测专业应届生求职信
2013/11/12 职场文书
给校长的建议书300字
2014/05/16 职场文书
道路交通事故赔偿协议书
2014/10/24 职场文书
毕业设计论文致谢词
2015/05/14 职场文书
如何使用分区处理MySQL的亿级数据优化
2021/06/18 MySQL
Java日常练习题,每天进步一点点(38)
2021/07/26 Java/Android
从原生JavaScript到React深入理解
2022/07/23 Javascript