前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python的socket使用

Python的socket使用

作者头像
IT架构圈
发布2018-05-31 15:42:37
9910
发布2018-05-31 15:42:37
举报
文章被收录于专栏:IT架构圈IT架构圈

socket(简称 套接字) 是进程间通信的一种方式,实现不同主机间的进程间通信,比如QQ

socket.socket(AddressFamily, Type) Address Family:可以选择 AF_INET(用于 Internet 进程间通信) 或者 AF_UNIX(用于同一台机器进程间通信),实际工作中常用AF_INET Type:套接字类型,可以是 SOCK_STREAM(流式套接字,主要用于 TCP 协议)或者 SOCK_DGRAM(数据报套接字,主要用于 UDP 协议)

UDP发送数据

代码语言:javascript
复制
from socket import *
udpSocket = socket(AF_INET, SOCK_DGRAM)# 创建套接字
sendAddr = ('192.168.1.1', 8080)# 发送到的ip和端口
sendData = "hello" # 发送的内容
udpSocket.sendto(sendData, sendAddr) #发送
udpSocket.close() # 关闭套接字

UDP接收数据

代码语言:javascript
复制
from socket import *
udpSocket = socket(AF_INET, SOCK_DGRAM)# 创建套接字
bindAddr = ('', 7788)# 绑定本机的端口,ip地址为空表示本机的任何一个ip
udpSocket.bind(bindAddr)#绑定本机的端口
recvData = udpSocket.recvfrom(1024)# 等待接收的数据,1024表示本次接收的最大字节数
print(recvData)
udpSocket.close()# 关闭套接字

udp广播

代码语言:javascript
复制
import socket, sys
dest = ('<broadcast>', 7788)# 这里<broadcst>可以写成当前网段的广播地址
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 创建udp套接字
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST,1)# 设置成能发送广播数据
s.sendto("Hi", dest)# 发送广播

TCP:传输控制协议,稳定,慢一些,web服务器(HTTP)使用tcp UDP:用户数据包协议,不稳定,快一些 TCP三次握手,四次挥手 TCP十种状态 TTL是指经过路由器的个数 MSL数据包在网络上存活的最长时间

TCP服务端 1.socket创建一个套接字 2.bind绑定ip和port 3.listen使套接字变为监听状态 4.accept等待客户端的信息 5.recv/send接收发送数据

代码语言:javascript
复制
from socket import *
tcpSerSocket = socket(AF_INET, SOCK_STREAM) # 创建TCPsocket
address = ('', 7788) #绑定本地的ip和端口
tcpSerSocket.bind(address) 
tcpSerSocket.listen(5)# 将socket变为监听状态,listen是建立连接的**队列**的个数,linux之中这个值是默认的,更改无效,阻塞
newSocket, clientAddr = tcpSerSocket.accept()#如果有客户端连接,则生成一个专门的套接字进行通讯,阻塞
recvData = newSocket.recv(1024) #获得客户端发送过来的消息
newSocket.send("thank you !")# 向客户端发送消息
newSocket.close() #关闭该客户端的套接字
tcpSerSocket.close() #关闭监听的套接字

TCP客户端

代码语言:javascript
复制
from socket import *
tcpClientSocket = socket(AF_INET, SOCK_STREAM)# 创建TCP socket
serAddr = ('192.168.1.102', 7788)
tcpClientSocket.connect(serAddr) #连接服务器
tcpClientSocket.send("hello") #向服务器发送消息
recvData = tcpClientSocket.recv(1024) # 接收消息
tcpClientSocket.close() # 关闭套接字

常见TCP攻击 DDOS SYN洪水攻击 客户端发完SYN,不发ACK DNS攻击 DNS服务器劫持,换域名对应的IP arp 中间人攻击

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程坑太多 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档