Python网络编程和多线程-网络编程基础

1.IP协议

IP地址:互联网上每个计算机的唯一标识

          若一台计算机同时接入到两个或更多网络,它就会有两个或多个IP地址

          IP地址对应的实际上是计算机的网络接口,通常是网卡

IP协议:负责将数据从一台计算机通过网络发送到另一台计算机。

           数据被分割成小块,然后通过IP包发送出去。

           互联网链路复杂,两台计算机之间通常有多条线路,路由器负责决定如何把一个IP包转发出去

           IPv4:32位(8*4);IPv6:128位(16*8)

2.TCP和UDP协议

TCP协议:建立在IP协议之上,负责在两台计算机之间建立可靠连接,保证数据包按顺序到达。

                 通过握手建立连接,然后对每个IP包编号,确保对方按顺序收到。如果包丢了,就自动重发。

UDP协议:建立在IP协议之上,但UDP协议是面向无连接的通信协议,不保证数据包的顺利到达,是不可靠传输,但效率比 TCP高。

3.端口
www.haohanshuwu.com 浩瀚书屋
每个网络程序都向操作系统申请唯一的端口号,这样,两个进程在两台计算机之间建立网络连接就需要各自的IP地址和各自的端口号。

4.Socket(套接字)

Socket是网络编程的一个抽象概念,用于网络通信编程。

Socket是TCP/IP网络最为通用的API,任何网络通信都是通过Socket来完成的

一个Socket表示“打开了一个网络链接”,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可。

(1)Socket构造函数:

  socket(family,type[,protocal])

     =>family:套接字家族

                    socket.AF_UNIX:只能够用于单一的Unix系统进程间通信

                    socket.AF_INET:服务器之间网络通信

                    socket.AF_INET6:IPv6

                  [从今开始当神豪](http://m.haohanshuwu.com/info/91.html)  :  http://www.haohanshuwu.com/book/0/91/

     =>type:套接字类型;

                 socket.SOCK_STREAMO:流式socket,针对TCP

                 socket.SOCK_DGRAM:数据报式socket,针对UDP

     =>protocol:一般不填,默认为0

(2)Socket对象函数

   服务器端套接字:

   =>s.bind(host,port):绑定地址(host,port)到套接字,在AF_INET下以元组(host,port)的形式表示地址

   =>s.listen(backlog):开始TCP监听。backlog指定在拒绝连接之前,最大的连接数量。至少为1,一般设为5即可

   =>s.accept():被动接受TCP客户端连接,(阻塞式)等待连接的到来

   客户端套接字:

   =>s.connect(address):主动与TCP服务器连接。一般address格式为元组(hostname,port),如果连接出错,返回socket.error              错误 

   =>s.connect_ex(address):connect()的拓展版本,出错时返回出错码,而不是抛出异常

   公共用途的套接字函数:

   =>s.recv(bufsize[,flag]):接收TCP数据,数据以字节串形式返回,bufsize指定要接收的最大数据量。flag提供有关信息的其他            信息,通常可以忽略

   =>s.send(data):发送TCP数据,将data中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于data的              字节大小

   =>s.send(data):完整发送TCP数据,将data中的数据发售那个到连接的套接字,但在返回之前会尝试发送所有数据。

                            若成功返回None,失败则抛出异常

武道神尊 : http://m.haohanshuwu.com/info/504.html
=>s.recvform(bufsize[,flag]):接收UDP数据,与recv()类似,但返回值是(data,address)

   =>s.sendto(data,address):发送UDP数据,将数据发送到套接字;address指定远程地址,返回值是发送的字节数

   =>s.close():关闭套接字

   =>s.getpeername():返回连接套接字的远程地址。返回值通常是元组(ipaddr,port)

   =>s.getsockname():返回套接字自己的地址。返回值通常是一个元组(ipaddr,port)

   =>s.setsockopt(level,optname,value):设置给定套接字选项的值

   =>s.getsockopt(level,optname):返回套接字选项的值

   =>s.settimeout(timeout):设置套接字操作的超时时间;timeout是一个浮点数,单位是秒;None表示没有超时时间

                                          一般超时时间应在刚创建套接字时设置,因为它们可能用于连接的操作

   =>s.gettimeout():返回当前超时时间的值,单位是秒,如果没有设置超时时间,则返回None

   =>s.fileno():返回套接字的文件描述符

   =>s.setblocking(flag):如果flag为0,则将套接字设为非阻塞模式,否则将套接字设为阻塞模式(默认值)。

                              非阻塞模式下,若调用recv()没有发现任何数据,或send()调用无法立即发送数据,将引起socker.error异常        =>s.makefile():创建一个与该套接字相关联的文件                            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值