使用python的socket模块进行网络编程
使用socket编程可以分成基于tcp和基于udp,tcp和udp两者最主要的区别是有无面向连接。
基于tcp的socket流程:
基于udp的socket的流程图:
(以上两图来源于网络)
可以看到基于udp的socket要简单得多,udp的客户端不需要事先connect,而udp的服务器端也不需要listen和accept。
下面贴上一些tcp client, tcp server, udp client, udp server的简单实现代码
tcp client:
- __author__ = 'seven'
- import socket
- target_host = "127.0.0.1"
- target_port = 80
- client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- client.connect((target_host, target_port))
- client.send("ABCDEF")
- response = client.recv(4096)
- print response
client.close()
tcp server:
- __author__ = 'seven'
- import socket
- import threading
- bind_ip = "0.0.0.0"
- bind_port = 80
- server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- server.bind((bind_ip, bind_port))
- server.listen(5)
- print "[*] Listening on %s:%d" % (bind_ip, bind_port)
- def handle_client(client_socket):
- request = client_socket.recv(1024)
- print "[*] Received: %s" % request
- client_socket.send("ACK!")
- client_socket.close()
- while True:
- client, addr = server.accept()
- print "[*] Accepted connection from: %s:%d" % (addr[0], addr[1])
- client_handler = threading.Thread(target=handle_client, args=(client,))
- client_handler.start()
- server.close()
udp client:
- __author__ = 'seven'
- import socket
- target_host = "127.0.0.1"
- target_port = 80
- client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- client.sendto("ABCDEF", (target_host, target_port))
- data, addr = client.recvfrom(4096)
- print data
client.close()
udp server:
- __author__ = 'seven'
- import socket
- bind_ip = "0.0.0.0"
- bind_port = 80
- server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- server.bind((bind_ip, bind_port))
- while True:
- data, addr = server.recvfrom(4096)
- if not data:
- print "client has exist"
- break
- server.sendto("ACK!", addr)
- print "received:%s from %s" % (data, addr)
- server.close()
稍微解释一下一些参数:
AF_INET参数说明使用标准的IPv4地址或主机名
AF_INET6参数说明使用IPv6地址或主机名
SOCK_STREAM参数说明是一个TCP客户端
SOCK_DGRAM参数说明是一个UDP客户端
使用python的socket模块进行网络编程的更多相关文章
- Python(九)之网络编程
一般的网络通信: Python中利用socket模块实现网络主机间通讯: socket.socket(family,type) family:套接字类型 AF_INET AF_UNIX type: S ...
- python基础教程总结13——网络编程,
1.网络设计模块 1.1 socket模块 根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认. 1)服务器监听:是服务器端套接 ...
- 老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具
老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具 poptest是业内唯一的测试开发工程师培训机构,测试开发工程师主要是为测试服务开发测试工具,在工作中要求你做网络级别的安全 ...
- python中socket模块详解
socket模块简介 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.socket通常被叫做"套接字",用于描述IP地址和端口,是一个通信 ...
- 如何使用socket进行java网络编程(二)
通过在如何使用socket进行java网络编程(一)中程序的编写,可以总结出一些常用的java socket编程的范例来. ServerSocket server = new ServerSocket ...
- Python基于socket模块实现UDP通信功能示例
Python基于socket模块实现UDP通信功能示例 本文实例讲述了Python基于socket模块实现UDP通信功能.分享给大家供大家参考,具体如下: 一 代码 1.接收端 import ...
- Python中使用模块和库编程
""" python中使用模块和库编程 导入模块 import modulename [as alias] from modulename import fun1,fun ...
- 从零开始学Python第八周:网络编程基础(socket)
Socket网络编程 一,Socket编程 (1)Socket方法介绍 Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Soc ...
- Python学习(十三) —— 网络编程
一.操作系统基础 操作系统(Operating System):OS是管理和控制计算机硬件和软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行 ...
随机推荐
- zabbix分布式安装全过程
项目规划 软件 版本 IP zabbix-server 3.4.15 10.1.10.128 zabbix-proxy 3.4.15 10.1.10.129 zabbix-agent 3.4.15 1 ...
- C# 基础知识系列- 17 实战篇 编写一个小工具(1)
0. 前言 这是对C# 基础系列的一个总结,现在我们利用之前学到的知识做一个小小的工具来给我们使用. 如果有看过IO篇的小伙伴,应该有印象.当时我提过一个场景描述,我们在平时使用系统的时候,经常会为了 ...
- oracle常用数学函数
数学函数 ABS:(返回绝对值) --返回绝对值 select abs(-1.11) from dual; CEIL:(向上取整) --向上取整 select ceil(3.1415) from du ...
- jQuery中bind()与on()绑定事件的区别
.on()方法比.bind()方法多一个参数selector .on()的selector参数是筛选出调用.on()方法的dom元素的指定子元素,如: $("ul").on('cl ...
- JSP+Servlet+JDBC+C3P0实现的人力资源管理系统
项目简介 项目来源于:https://github.com/ruou/hr 本系统基于JSP+Servlet+C3P0+Mysql.涉及技术少,易于理解,适合JavaWeb初学者学习使用. 难度等级: ...
- 面试官:你说你懂i++跟++i的区别,那你会做下面这道题吗?
面试官:你说你懂i++跟++i的区别,那你知道下面这段代码的运行结果吗? 面试官:"说一说i++跟++i的区别" 我:"i++是先把i的值拿出来使用,然后再对i+1,++ ...
- 软路由OpenWrt(LEDE)2020.4.4编译 UnPnP+NAS+多拨+网盘+DNS优化
近期更新:2020.04.24编译-基于OpenWrt R2020.3.19版本. 2020.04.04更新记录: 修正国内域名加速脚本部分缺陷 内置打印机共享,ZeroTier 新增多套主题 S ...
- MYSQL连接端口被占引入文件路径错误
今天早上打算本地win7机器上用Wampserver搭建PHP环境,把自己的程序配置上去.下载最新的wampserver 3.0.6版本安装后,发现mysql一直无法运行,以为是wampserver版 ...
- R语言:日薪和应发工资
生产部门普通员工为日薪,有时要知道日薪和应发工资的转换关系.做表一为日薪取整数,白天工资+晚上工资=应发工资,延长工作时间取时薪的1.5倍,应发工资保留到十位.做表二为应发工资取十的倍数,推算相应日薪 ...
- python爬虫-直播吧
概述 这是一个我很喜欢的小网站,想了解这个网站先从爬虫开始,爬取直播吧所有的栏目及内容,再存入数据库.先写个简单点的,后期再不断的优化下. 准备阶段 直播吧网址https://www.zhibo8.c ...