网络通讯python
边缘网络中的主机数目庞大,计算机网络是如何实现网络中的两台主机之间的通讯的呢?编程
简单的来讲,计算机网络中的主机通讯如同现实生活中的物流,当咱们须要发送一个快递时,咱们须要首先须要准备本身要发送的物品,至关于网络体系结构中的应用层,编写本身的发送的消息;第二,要发送的物品每每须要一个外包装,避免物品的损坏,至关于应用层的消息传递到传输层进行的封装(消息封装为分组);第三,填写快递单的收发地址,于网络层中填写IP,端口地址相同;第四,将快递交给站点准备发送,等价于在链路层将分组数据包封装成帧,准备在物理层发送;最后,快递员经过既定的物流路线将快递发送出去,与在物理层经过路由信息表将帧发送出去相同。服务器
网络数据包传送网络
网络中数据包的传送大体分为两类:socket
Socket编程ide
python经过使用socket抽象网络中主机进程之间的交互实现网络通讯。Socket实现了IP地址与端口的抽象,其中IP指定了主机在网络中的位置,端口指定了主机上接收,发送信息的应用程序。函数
python中,Socket又称"套接字",应用程序一般经过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间能够通信。spa
服务器端Socket编程计算机网络
建立Socket对象code
绑定到相应的IP地址端口
打开监听服务
接收数据
关闭Socket
客户端Socket编程
建立Socket对象
链接到远程主机IP地址端口
发送数据
关闭Socket
Socket对象建立函数
socket.socket([family[, type[, proto]]])
familly:对应协议簇,AF_UNIX或者AF_INET
type:对应面向链接的仍是非链接分为SOCK_STREAM
或SOCK_DGRAM
(TCP和UDP)
proto:协议,HTTP,SMTP等
Socket内置方法
服务器:
s.bind():绑定地址
s.listen():开启监听服务
s.accept():被动等待接收客户端的链接请求
客户端:
s.connect():链接到远程主机
公用:
s.recv():接收TCP数据流
s.send():发送TCP数据流
s.recvfrom():接收UDP数据流
s.sendto():发送UDP数据流
s.close():关闭一个socket链接
s.getpeername():返回链接套接字的远程地址
s.getsockname():返回套接字本身的地址
s.setsockopt():设置给定套接字选项的值
s.getsockopt():返回套接字选项的值
s.makefile():建立一个与该套接字相关连的文件
实例
# -*- coding: utf-8 -*- import socket s = socket.socket() #建立socket对象 host = socket.gethostname() #获取本机主机名 port = 20000 s.bind((host, port)) s.listen(5) #开启监听服务,5表示最大能够链接5个客户机 while True: c, address = s.accept() #创建一个客户链接 print '客户端地址:', address c.send('hello') #向客户端发送消息 c.close() #关闭一个socket链接
# -*- coding: utf-8 -*- import socket s = socket.socket() #建立socket对象 host = socket.gethostname() #调用socket类方法获取主机名 port = 20000 #定义绑定端口 s.connect((host, port)) #链接到远程主机 print s.recv(1024) #接收数据,1024是字节数 s.close() #关闭一个socket链接