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中获取网页状态码的两个方法
Nov 03 Python
python executemany的使用及注意事项
Mar 13 Python
读取本地json文件,解析json(实例讲解)
Dec 06 Python
详解django的serializer序列化model几种方法
Oct 16 Python
python使用response.read()接收json数据的实例
Dec 19 Python
python中如何使用分步式进程计算详解
Mar 22 Python
Python/Django后端使用PIL Image生成头像缩略图
Apr 30 Python
python 用所有标点符号分隔句子的示例
Jul 15 Python
浅析python 中大括号中括号小括号的区分
Jul 29 Python
PyTorch中反卷积的用法详解
Dec 30 Python
python将logging模块封装成单独模块并实现动态切换Level方式
May 12 Python
python实现手机推送 代码也就10行左右
Apr 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
一个ubbcode的函数,速度很快.
2006/10/09 PHP
php session 错误
2009/05/21 PHP
PHP下对字符串的递增运算代码
2010/08/21 PHP
php设计模式之简单工厂模式详解
2014/09/04 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
改写一个简单的菜单 弹性大小
2010/12/02 Javascript
关于JavaScript中原型继承中的一点思考
2012/07/25 Javascript
详解PHP中pathinfo()函数导致的安全问题
2017/01/05 Javascript
js实现产品缩略图效果
2017/03/10 Javascript
nodejs和C语言插入mysql数据库乱码问题的解决方法
2017/04/14 NodeJs
JavaScript之浏览器对象_动力节点Java学院整理
2017/07/03 Javascript
极简主义法编写JavaScript类
2017/11/02 Javascript
用ES6的class模仿Vue写一个双向绑定的示例代码
2018/04/20 Javascript
AngularJS上传文件的示例代码
2018/11/10 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
Node.js安装详细步骤教程(Windows版)详解
2019/09/01 Javascript
Vue通过getAction的finally来最大程度避免影响主数据呈现问题
2020/04/24 Javascript
[04:38]完美世界携手游戏风云打造 卡尔工作室饰品系统篇
2013/04/25 DOTA
[00:33]DOTA2上海特级锦标赛 CDEC战队宣传片
2016/03/04 DOTA
在Django框架中运行Python应用全攻略
2015/07/17 Python
Python中常用操作字符串的函数与方法总结
2016/02/04 Python
解析Python中的__getitem__专有方法
2016/06/27 Python
wxPython的安装图文教程(Windows)
2017/12/28 Python
Python爬虫包BeautifulSoup实例(三)
2018/06/17 Python
解决python Markdown模块乱码的问题
2019/02/14 Python
python pygame实现方向键控制小球
2019/05/17 Python
Python实用库 PrettyTable 学习笔记
2019/08/06 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
2020/09/01 Python
用canvas实现图片滤镜效果附演示
2013/11/05 HTML / CSS
护士实习自我鉴定
2013/10/22 职场文书
函授药学自我鉴定
2014/02/07 职场文书
房地产营销策划方案
2014/02/08 职场文书
电台实习生求职信
2014/02/25 职场文书
说好普通话圆梦你我他演讲稿
2014/09/21 职场文书
MySQL系列之五 视图、存储函数、存储过程、触发器
2021/07/02 MySQL
关于Nginx中虚拟主机的一些冷门知识小结
2022/03/03 Servers