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 相关文章推荐
Python3写入文件常用方法实例分析
May 22 Python
Python将图片批量从png格式转换至WebP格式
Aug 22 Python
Python 详解基本语法_函数_返回值
Jan 22 Python
分享6个隐藏的python功能
Dec 07 Python
Python实现去除列表中重复元素的方法小结【4种方法】
Apr 27 Python
浅谈django orm 优化
Aug 18 Python
python3.7 sys模块的具体使用
Jul 22 Python
django基于cors解决跨域请求问题详解
Aug 06 Python
将Python文件打包成.EXE可执行文件的方法
Aug 11 Python
python输出数组中指定元素的所有索引示例
Dec 06 Python
Python实战之大鱼吃小鱼游戏的实现
Apr 01 Python
python井字棋游戏实现人机对战
Apr 28 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入门源程序
2006/10/09 PHP
php防攻击代码升级版
2010/12/29 PHP
PHP常用函数和常见疑难问题解答
2014/03/05 PHP
PHP5.5迭代生成器用法实例详解
2016/03/16 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
2016/10/10 PHP
YII框架中搜索分页jQuery写法详解
2016/12/19 PHP
浅析PHP7的多进程及实例源码
2019/04/14 PHP
Yii框架Session与Cookie使用方法示例
2019/10/14 PHP
农历与西历对照
2006/09/06 Javascript
JavaScript面向对象之Prototypes和继承
2012/07/12 Javascript
JavaScript回调(callback)函数概念自我理解及示例
2013/07/04 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
2015/02/28 Javascript
javascript事件委托的用法及其好处简析
2016/04/04 Javascript
javascript宿主对象之window.navigator详解
2016/09/07 Javascript
javascript性能优化之分时函数的介绍
2018/03/28 Javascript
[04:12]第二届DOTA2亚洲邀请赛选手传记-Newbee.Sccc
2017/04/03 DOTA
Python中删除文件的程序代码
2011/03/13 Python
Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
2014/05/06 Python
Python获取服务器信息的最简单实现方法
2015/03/05 Python
python操作sqlite的CRUD实例分析
2015/05/08 Python
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
Python对象与引用的介绍
2019/01/24 Python
Django使用unittest模块进行单元测试过程解析
2019/08/02 Python
django使用xadmin的全局配置详解
2019/11/15 Python
解决pycharm修改代码后第一次运行不生效的问题
2021/02/06 Python
天美时手表加拿大官网:Timex加拿大
2016/09/01 全球购物
澳大利亚便宜的家庭购物网站:CrazySales
2018/02/06 全球购物
小学综合实践活动总结
2014/07/07 职场文书
简单租房协议书
2014/10/21 职场文书
撤诉状格式范本
2015/05/19 职场文书
2016年法制宣传月活动总结
2016/04/01 职场文书
致创业您:正能量激励人心句子(48条)
2019/08/15 职场文书
Pytorch中Softmax与LogSigmoid的对比分析
2021/06/05 Python
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
2021/09/25 Java/Android
oracle设置密码复杂度及设置超时退出的功能
2022/06/28 Oracle
详解Anyscript开发指南绕过typescript类型检查
2022/09/23 Javascript