Python之旅.第八章.网络编程

一、网络编程

1C/SB/S架构

   client<------>server

   browser<------>server

   学习socket编程就是要编写一个客户端软件和服务端软件,然后实现服务端与客户端基于网络通信。

 

2、什么是网络?

    1、物理连接介质

    2、互联网协议

       互联网协议就是一堆标准

       比喻:互联网协议就是计算机界的英语

 

3osi五层协议(有四层,有七层,主要用五层) 

应用层:例如HTTPmailftp,程序员定义的

传输层:TCP/ UDP,基于端口工作,通过端口找到是电脑中的哪个应用程序

网络层:IP协议,通过IP地址找到所在局域网

数据链路层:Ethernet以太网协议在局域网内通过mac地址查找电脑,规定分组标准

物理层:发送电信号 01010101

 

二、基于tcp协议的套接字通信

服务端:

import socket

 

phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话

phone.bind(('127.0.0.1',8081)) #插手机卡,补充:0-65535 0-1024给系统用的

phone.listen(5) # 开机

 

print('start...')

conn,client_addr=phone.accept() # 等电话连接

print('连接来了:',conn,client_addr)

 

# 收发消息

msg=conn.recv(1024) #收消息,1024是一个最大的限制

print('客户端的消息: ',msg.decode('utf-8'))

conn.send(msg+'SB'.encode('utf-8'))

 

# 挂电话

conn.close()

# 关机

phone.close()

 

客户端:

import socket

 

phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话

phone.connect(('127.0.0.1', 8081)) # 拨电话,地址为服务端的ip和端口

 

phone.send('你好'.encode('utf-8')) # 发消息b'hello'

data = phone.recv(1024) #收消息

 

print(data.decode('utf-8'))

 

phone.close()

 

三、加上通信循环与连接循环

服务端:

import socket

 

phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

phone.bind(('127.0.0.1',8081))

phone.listen(5)

 

print('start...')

while True: # 连接循环

    conn,client_addr=phone.accept()

    print('客户端 ',client_addr)

 

    while True: # 通信循环

        try:

            msg=conn.recv(1024)

            print('客户端的消息: ',msg)

            conn.send(msg+b'SB')

        except ConnectionResetError:

            break

    conn.close()

phone.close()

 

客户端:

import socket

 

phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话

phone.connect(('127.0.0.1',8081)) # 拨电话,地址为服务端的ip和端口

 

while True:

    msg=input('>>>: ').strip()

    phone.send(msg.encode('utf-8')) # 发消息b'hello'

    data=phone.recv(1024) #收消息

 

    print(data.decode('utf-8'))

 

phone.close()

 

四、其他

1 互联网协议,可看作是一个安装在计算机上的包

2 交换机:有mac地址学习功能

3 ARP(地址解析协议),可将IP地址转成mac地址,mac地址转成IP地址

4 IP+端口可锁定一架计算机上的某个应用程序

5 IP 和子网掩码-》局域网地址(子网地址)

6  TCD又称好人协议,可靠协议,需要三次握手建立链接

7 标志位:sgn=1请求信息,ack=1 确认信息,seq=’ ’序列号,ack=1+x(序列号)

8 在创建链接时如果并发少,基本看不多SYN—REVD。但如若受到洪水攻击(高并发)系统会出现SYN—REVD状态

9 TCD需要四次挥手以断链接。谁先发完信息,谁先发出断链接请求。通常是SERVER端先发出,但不一定。

10fin=1 断链接请求,ack=1 确认信息

11Fin_WAIT_1 为主动断链接的一方

12、在断链接时如果并发少,基本看不多TIME—WAIT。但如若高并发,系统会出现TIME—WAIT状态,需要监查内存

13TCP,需要建链接,又称可靠传输,相对安全但效率低,一般用于转账

14UDP,不需要建链接,又称不可靠传输,效率高,但安全性较低,一般用于聊天(QQ)和查询

15、套接字有被称作IP和端口

16AF_INET AFaddress family 套接字类型,INET:基于网络)

17TCP 被称为流式协议,SOCK_STREAM

18UDP 被称为数据报协议,SOCK_DGRAM

19127.0.0.1 指本机,主要用于调试

20、端口0-655350-1024被系统使用,其他号码可选用

21phone.listen(5): 5指的是同时最多可以用多少个请求,而不是连接数

22conn.recv(1024)1024为最大限制的字节数

23conn为套接字对象,为三次握手的产物,可收可发

24conn.close():回收系统资源

 

 

posted @ 2018-04-18 19:39  yangli0504  阅读(127)  评论(0编辑  收藏  举报