码迷,mamicode.com
首页 > 编程语言 > 详细

Python,socket编程

时间:2017-08-20 22:29:56      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:host   socket编程   close   三次握手   bin   cli   选项   world   oca   

TCP协议 IP+端口

应用层协议做的事不同,但都离不开数据的交换,本质上都是收和发~
为什么要三次握手?
目标机器可能不存在,握手期间,发送方也可能down掉。
客户端————服务器,先发请求的那个是客户端,客户端发送的信息的端口是随机的。。服务器端的端口是固定的
先要有接收端,相当于服务器
接收端要申请端口号,服务要启动正常运行开始监听该端口

地址簇Socket Families

相当于网络层的一个东西
socket.AF_UNIX unix本机进程间通信
socket.AF_INET IPV4
socket.AF_INET6 IPV6

a进程和b进程想通信,没有网络的情况下。
a先dump,b再load。通过硬盘的话速度慢,默认在内存中a进程是不能访问b进程数据的,想快速通信可以借助AF_UNIX,本地启动一个socket在七层协议里转一圈
a进程传给b

Socket Types

socket.SOCK_STREAM #for tcp
socket.SOCK_DGRAM #for udp
socket.SOCK_RAW
#原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;
其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。
牛逼了可以伪造IP地址,DDOS攻击,洪水攻击,发送大量请求导致服务关闭
a访问b要三次握手,a发第一次,后a改自己的IP再发请求,b的回应到不了a
导致b端该连接出现挂起,a再改IP地址发请求..再挂起..
socket.SOCK_RDM
#是一种可靠的UDP形式,即保证交付数据报但不保证顺序。SOCK_RAM用来提供对原始协议的低级访问,
在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。
socket.SOCK_SEQPACKET #废弃了

实例:先启动服务器监听端口,再启动客户端:

# 服务器
import socket

server = socket.socket()
server.bind(("localhost",7000))#只是绑定要监听的端口
server.listen() #监听,我要监听这个端口
print("我开始监听7000端口了---")
conn,addr = server.accept()  #等电话,conn就是连接实例,addr为源IP地址随机的

print("请求来了")
# data = server.recv(1024) #接收1024
# 通话中又来一个电话要切换,server.switch()要知道先后顺序,可以给每个请求标记就是上面的conn
data = conn.recv(1024)
print("recv:",data)
conn.send(data.upper())
server.close()
‘‘‘输出:
我开始监听7000端口了---
请求来了
recv: b‘helloworld‘
‘‘‘

 

#客户端
import socket

client = socket.socket()
#声明socket类型,同时生成socket对象
#定义协议类型默认是family=AF_INET, type=SOCK_STREAM
client.connect(("localhost",7000))
client.send(b"helloworld")
data = client.recv(1024)
print("recv:", data)
client.close()

#输出:recv: b‘HELLOWORLD‘

 

Python,socket编程

标签:host   socket编程   close   三次握手   bin   cli   选项   world   oca   

原文地址:http://www.cnblogs.com/revo/p/7401536.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!