Python Socket实现简单TCP Server/client功能示例
作者:奔跑吧大龙 发布时间:2021-05-21 19:19:46
标签:Python,Socket,TCP
本文实例讲述了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.gethostname
与socket.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程序设计有所帮助。


猜你喜欢
- 本文实例为大家分享了js实现简单放大镜效果的具体代码,供大家参考,具体内容如下效果效果,鼠标在原图片移动,黄色小盒子跟随鼠标移动,黄色小盒子
- 问题:生产环境的数据库可能比较大,如果直接进行全备而不压缩的话,备份集就会占用了大量磁盘空间。给备份文件的存放管理带来不便。解决方案:通过w
- 本文用 Python 实现 PS 滤镜中的 USM 锐化效果import matplotlib.pyplot as pltfrom skim
- 目录问题思路代码实现测试效果问题一张excel表格,大概1万行,需要录入系统系统每次最多只能录入500行表格数据,一旦超过500行,就会录入
- RSA算法RSA算法是一种公钥加密技术,被认为是最安全的加密方式.它是由Rivest,Shamir和Adleman于1978年发明的,因此命
- VSCode插件安装完成后,有些插件如果你想要完整的使用其中的功能得在settings.json中就行配置,接下来是我常用的一些配置{ &n
- 本文实例讲述了php防止sql注入中过滤分页参数的方法。分享给大家供大家参考。具体分析如下:就网络安全而言,在网络上不要相信任何输入信息,对
- go build 报错:main.go:5:2: cannot find package “gopkg.in/go-playground/v
- 1、安装virtulenv、virtulenvwrapper包pip install virtualenv virtualenvwrappe
- 一、请求扩展1.before_request作用: 类比django中间件中的process_request,在请求到来执行路由函数之前先执
- 具体代码如下所述:#coding=utf-8import itchatfrom itchat.content import TEXTfrom
- 最近使用Python 3.5写了一个GUI小程序,于是想将该写好的程序发布成一个exe文件,供自己单独使用。至于通过安装的方式使用该程序,我
- 为什么传输几千个表的数据时向导会失败?当前的向导体系结构会创建一个 DTS 软件包数据流以传输数据。但如果要处理几千个表,则会遇到可伸缩性限
- 对于变量的访问和设置,我们可以使用get、set方法,如下:class student: def __init__(self,n
- 最新的CentOS8已经内置了Python2和Python3,出入Python2和Python3两个命令可以分别进入Python2和Pyth
- 在ASP中,除了ADODB、Scripting 等一些常用组件外,我们还可以用微软的ActiveX方法来轻松捕获哟: <%u
- 一、先进行剪切操作圆形区域占图片可能不多,多余的部分不要。看下图。只要纽扣电池内部和少许的边缘部分,其余黑色背景部分不需要。先沿着纽扣电池的
- OVER的定义OVER用于为行定义一个窗口,它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的
- 近日,sql数据库入门学习群有朋友问到,利用sql如何删除表格的前1000行数据,是否可以实现?如果是oracle数据库管理软件,实现起来相
- HTTP Referer是header的一部分, 当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链