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 相关文章推荐
天翼开放平台免费短信验证码接口使用实例
Dec 18 Python
Python制作CSDN免积分下载器
Mar 10 Python
python中的代码编码格式转换问题
Jun 10 Python
Python中生成Epoch的方法
Apr 26 Python
Python反射的用法实例分析
Feb 11 Python
Python Requests模拟登录实现图书馆座位自动预约
Apr 27 Python
Python多线程原理与用法详解
Aug 20 Python
python版本五子棋的实现代码
Dec 11 Python
使用python实现ftp的文件读写方法
Jul 02 Python
使用python模拟命令行终端的示例
Aug 13 Python
Python通过socketserver处理多个链接
Mar 18 Python
Python 第三方库 openpyxl 的安装过程
Dec 24 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 的 __FILE__ 常量
2007/01/15 PHP
PHP获取类中常量,属性,及方法列表的方法
2009/04/09 PHP
PHP number_format() 函数定义和用法
2012/06/01 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
laravel返回统一格式错误码问题
2019/11/04 PHP
jquery图片滚动放大代码分享(1)
2015/08/25 Javascript
盘点javascript 正则表达式中 中括号的【坑】
2016/03/16 Javascript
node.js学习之base64编码解码
2016/10/21 Javascript
利用vue写todolist单页应用
2016/12/15 Javascript
详解js的异步编程技术的方法
2017/02/09 Javascript
微信小程序网络请求的封装与填坑之路
2017/04/01 Javascript
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
JS中Object对象的原型概念基础
2018/01/29 Javascript
Node.js log4js日志管理详解
2018/07/31 Javascript
vue鼠标移入添加class样式,鼠标移出去除样式(active)实现方法
2018/08/22 Javascript
JS计算两个数组的交集、差集、并集、补集(多种实现方式)
2019/05/21 Javascript
微信小程序如何获取地址
2019/12/24 Javascript
node.js中module模块的功能理解与用法实例分析
2020/02/14 Javascript
js实现简单的随机点名器
2020/09/17 Javascript
python中的break、continue、exit()、pass全面解析
2017/08/05 Python
python实现下载pop3邮件保存到本地
2018/06/19 Python
Python tkinter实现图片标注功能(完整代码)
2019/12/08 Python
如何基于Python + requests实现发送HTTP请求
2020/01/13 Python
教你如何一步一步用Canvas写一个贪吃蛇
2018/10/22 HTML / CSS
遮罩层 + Iframe实现界面自动显示的示例代码
2020/04/26 HTML / CSS
压铸汽车模型收藏家:Diecastmodelswholesale.com
2016/12/21 全球购物
如何提高MySql的安全性
2014/06/19 面试题
母亲追悼会答谢词
2014/01/27 职场文书
企业办公室岗位职责
2014/03/12 职场文书
个人培训自我鉴定
2014/03/28 职场文书
企业党员个人自我评价
2014/09/20 职场文书
五年级小学生评语
2014/12/26 职场文书
学生不参加考试检讨书
2015/02/19 职场文书
2016年小学推普宣传周活动总结
2016/04/06 职场文书
vue首次渲染全过程
2021/04/21 Vue.js
java项目构建Gradle的使用教程
2022/03/24 Java/Android