lichao_normal

导航

python网络编程学习

网络通信

  边缘网络中的主机数目庞大,计算机网络是如何实现网络中的两台主机之间的通信的呢?

  简单的来说,计算机网络中的主机通信如同现实生活中的物流,当我们需要发送一个快递时,我们需要首先需要准备自己要发送的物品,相当于网络体系结构中的应用层,编写自己的发送的消息;第二,要发送的物品往往需要一个外包装,避免物品的损坏,相当于应用层的消息传递到传输层进行的封装(消息封装为分组);第三,填写快递单的收发地址,于网络层中填写IP,端口地址相同;第四,将快递交给站点准备发送,等价于在链路层将分组数据包封装成帧,准备在物理层发送;最后,快递员通过既定的物流路线将快递发送出去,与在物理层通过路由信息表将帧发送出去相同。

 

网络数据包传送

  网络中数据包的传送大致分为两类:

  1.   TCP传送:基于TCP协议,完成完整的3此握手过程,实现可靠的信息传送,能够保证发送的消息一定能够传送到接收方。
  2.   UDP传送:基于UDP协议,类似于洪泛传送,不会完成3此握手过程,因此不能够保证发送的消息一定能够被接收方接收

Socket编程

  python通过使用socket抽象网络中主机进程之间的交互实现网络通信。Socket实现了IP地址与端口的抽象,其中IP指定了主机在网络中的位置,端口指定了主机上接收,发送信息的应用程序。

  python中,Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。

  服务器端Socket编程

    创建Socket对象

    绑定到相应的IP地址端口

    打开监听服务

    接收数据

    关闭Socket

  客户端Socket编程

    创建Socket对象

    连接到远程主机IP地址端口

    发送数据

    关闭Socket

Socket对象创建函数

    socket.socket([family[, type[, proto]]])

    familly:对应协议簇,AF_UNIX或者AF_INET

    type:对应面向连接的还是非连接分为SOCK_STREAMSOCK_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连接
Server Code
# -*- 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连接
Client Code

 

  

posted on 2017-12-23 22:39  lichao_normal  阅读(202)  评论(0编辑  收藏  举报