2018年8月15日UDP编程和面向对象的TCP编程

今天学到的新单词:
denial n否认拒绝
datagram  n数据包 

TCP协议:(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议
UDP协议:(User Datagram Protoco)用户数据包协议,是一种面向无连接的,不可靠的通信协议。

DoS攻击是Denial of Service的简称,即拒绝服务DoS攻击,是指故意的攻击
网络协议实现的缺陷或直接通过野蛮手段残忍地耗尽被攻击对象的资源,
目的是让目标计算机或网络无法提供正常的服务或资源访问,使目标系统服务系统停止响应甚至崩溃

DDOS:分布式拒绝服务攻击  是属于传输层的攻击,向服务器发出的请求一般都不是正常的请求,而是异常的请求
在建立连接时的三次握手中,只进行前两次,不进行第三次,导致服务器一直处于等待状态占用资源,
对于这种攻击方式,比较棘手,因为传播途径是属于传输层的正常请求方式,一般的解决方式是查看访问记录
把一分钟内多次访问的ip加入黑名单

同时DOS是磁盘操作系统的缩写,是个人计算机上的一类操作系统

PIN(Personal Identification Number.就是SIM卡的个人识别密码)可以给手机卡加锁,每次开机需要
输入PIN密码才能使用手机卡,如果PIN输入三次都错误的话就会自动上锁,
这时需要向服务运营商索要用PUK(PIN Unlocking Key)码解锁,PUK码只能输入10次,10次错误之后就永久锁死

fping可以实现局域网的地址扫描和网络测试。
fping可以在命令行中指定要ping的主机数量范围,也可以指定含有要ping的主机列表文件

元组?用于存放没有顺序不能重复的组合数据类型

***************************************
socket套接字最初出现的时候作用是使同一台电脑上的不同程序进行数据交换
最后随着socket的发展,为了区分不同平台不同体系的套接字模型对象,定义了地址
家族的概念:Adress Family,也经常简写为AF。 
Unix 系统中的套接字就是第一种家族套接字,称为 AF_UNIX,或者 AF_LOCAL
套接字的分类:
面向文件的套接字:通过文件进行数据交互  
面向网络的套接字:通过网络进行数据交互 

面向网络:AF_INET | AF_INET6
     面向连接:SOCK_STREAM == TCP协议
     面向无连接:SOCK_DGRAM == UDP协议

*************************************

python中提供了一个面向对象开发的网络编程模块socketserver:
socketserver:自带属性是建立短连接,不过可以在客户端或者服务器端进行代码的改造,
就可以实现长连接让聊天的过程持续进行

面向对象开发以TCP方式连接的服务端的开发流程是:
1.引入需要的模块
2.自定义请求类型 
    重写请求方法
3.创建一个启动器

具体代码:
"""
面向对象开发的TCP长连接服务器端
所谓长连接就是在重写的处理方法加一个while循环,不让程序退出聊天的语句
"""

#引入相应的模块
from socketserver import(TCPServer as TCP, StreamRequestHandler as SRH)

#自定义请求处理类型
class MyRequestHandler(SRH):

    #重写处理方法
    def handle(self):
        while True:
            print("有一个客户端连接上了", self.client_address)

            #给客户端发送信息
            info = input("给客户端发送的信息是:")
            self.request.send(info.encode("utf-8"))

            #接收客户端信息
            msg = self.request.recv(1024)
            print(msg.decode("utf-8"))

if __name__ == "__main__":
    ADDRESS = ("", 8080)

    #创建一个TCP对象
    tcp_server = TCP(ADDRESS, MyRequestHandler)

    print("server is starting, waiting...")

    #启动TCP
    tcp_server.serve_forever()

*************************************
客户端:因为socketserver只是用于服务器端的开发,所以客户端的开发还是普通的开发流程
1.引入需要的模块
2.定义连接信息
3.创建缓冲空间
4.创建客户端套接字
5.连接到服务器
6.收发信息的循环模块

具体代码:
"""TCP长连接的客户端"""
#导入需要的模块
import socket

#定义连接信息
HOST = "192.168.13.7"
PORT = 8080
ADDRESS = (HOST, PORT)

#定义一个缓冲空间
BUFFER = 1024

#创建一个TCP套接字对象
tcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#连接主机
tcp_client.connect(ADDRESS)

#收发信息
while True:
    #接收信息
    info = tcp_client.recv(BUFFER)
    print(info.decode("utf-8"))

    #发送信息
    msg = input("给服务器发送的信息:")
    tcp_client.send(msg.encode("utf-8"))
    if msg == "BYE":
        tcp_client.close()
        break
 

猜你喜欢

转载自blog.csdn.net/qq_40994972/article/details/81711957