Python的socket使用

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

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

UDP发送数据

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接收数据

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广播

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接收发送数据

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客户端

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 中间人攻击

本文分享自微信公众号 - 编程坑太多(idig88)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-03-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏蘑菇先生的技术笔记

Go中原始套接字的深度实践

原始套接字(raw socket)是一种网络套接字,允许直接发送/接收更底层的数据包而不需要任何传输层协议格式。平常我们使用较多的套接字(socket)都是基于...

28220
来自专栏高性能服务器开发

服务器开发中网络数据分析与故障排查经验漫谈

一、 操作系统提供的网络接口 为了能更好的排查网络通信问题,我们需要熟悉操作系统提供的以下网络接口函数,列表如下: 接口函数名称接口函数描述接口函数签名soc...

39250
来自专栏宋凯伦的技术小栈

【菜鸟学Linux】Cron Job定期删除Log(日志)文件

  以前一直做Windows开发,近期的项目中要求使用Linux。作为小菜鸟一枚,赶紧买了一本经典书《鸟哥的Linux私房菜》学习。最近刚好有一个小任务 - 由...

348100
来自专栏从零开始学 Web 前端

10 - JavaSE之网络编程

为什么要分层呢?因为整个网络协议非常复杂,要涉及到方方面面的知识,而且还有对底层硬件的操作,利用分层的思想,我们可以将复杂的通信协议分割成一层层的形式,上一层可...

13540
来自专栏鸡蛋君

防止暴力破解,请更换SSH默认端口

27520
来自专栏Golang语言社区

linux服务器开发三(网络编程) --二

半关闭 当TCP链接中A发送FIN请求关闭,B端回应ACK后(A端进入FIN_WAIT_2状态),B没有立即发送FIN给A时,A方处在半链接状态,此时A可以接收...

79070
来自专栏解Bug之路

从linux源码看socket的close

笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。上篇博客讲了socket的阻塞和非阻塞,这篇就开始谈一谈socket的...

30170
来自专栏北京马哥教育

linux性能调优(整理)

为什么要性能调优? 大部分的linux发行版是为了完全兼容市场中大部分计算机而设计的。这是一个相当混杂的硬件集合(硬盘,显卡,网卡,等等)。所以Red Hat,...

3.1K130
来自专栏黄子玥的专栏

深入理解websocket传输过程

上一篇已经大概介绍了websocket是基于tcp传输的上层协议,且握手方式借用了http的过程,这个过程我们通过一个强大的网络抓包工具wires...

29640
来自专栏散尽浮华

Nginx/Apache服务连接数梳理

统计连接数,使用netstat命令或ss命令都可以 1)统计连接数(80端口) [root@wang ~]# netstat -nat|grep -i "80"...

22680

扫码关注云+社区

领取腾讯云代金券