网络编程 TCP 和 UDP

网络编程

概念:就是用来实现网络互连的不同计算机上运行的程序之间的数据交换。

模型:1 OSI(Open System Interconnection)参考模型,是一个基本模型,七层

    应用层-应用程序,比如qq 、浏览器
    表示层-主要是对接受的数据进行解释、加密与解密、压缩与解压缩等。简单点说就是把计算机能
          够识别的东西转换成人能够识别的东西
    会话层-通过传输层建立数据传输的通道
    传输层-定义数据传输的协议和端口
    网络层-主要将从下层接收到数据进行IP地址的封装与解封装,这一层的工作设备是路由器,
            发送数据是封装,接收数据是解封装。
    数据链路层-主要将从物理层接受的数据进行封装与解封装,这一层的工作设备是交换机,数据
            通过交换机来传输。
    物理层-主要定义物理设备标准,如网线的接口类型,光纤的接收类型,各种传输介质的传输速率等。他的主要作用是传输比特流(1 0)

TCP/IP 参考模型

应用层-
传输层-
网际层-
主机至网络层-

网络三要素:IP地址 端口号 协议(TCP、UDP)

IP

获取IP地址和主机名方式

        import socket #导入socket 模块
        #获得本机名字
        name = socket.gethostname()
        #根据名字获取IP地址 
        ip = socketgethostbyname

###I

P地址分类:

A类:第一个号段为网络号段 + 后三段的主机号段

    一个网络号:256*256*256 = 16777216

B类:前两个号段为网络号段 + 后两个号段为主机号段

    一个网络号:256*256 = 65536

C类:前三段号段为网络号段 + 主机号段

    一个网络号:256

组成:网络号段 + 主机号段

A类:1.0.0.1—127.255.255.154

B类:128.0.0.1—191.255.255.254

C类:192.0.0.1—233.255.255.254

D类:244.0.0.1—239.255.255.254

E类:240.0.0.1—247.255.255.254

特殊的IP地址:127.0.0.1 表示本机

192.168.x.x 私有地址 10.x.x.x 互联网上不使用,用在局域网

在终端用:ipconfig 查看IP

端口:0-65525 是有效端口,0-1024是系统使用的或者保留端口

协议:通信规则,通信方式(TCP UDP)

TCP:

    需要建立连接,速度慢,可靠安全,比如打电话

UDP:

    不需要建立连接,速度快,不可靠,不安全,只管发,不管有没有收到。比如发短信、发消息

TCP通信代码

客户端

import socket
'''
创建socket对象

'''
#创建是socket对象 指定ip协议 和协议方式
#socket.AF_INET---ipv4    socket.SOCK_STREAM--TCP
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#连接参数
client.connect(('10.0.***.***', 9000))
while True:
    data = input("请输入给服务器的话")
    client.send(data.encode("utf-8"))
    info = client.recv(1024)   #接受服务器
    print("服务器说:", info.decode("utf-8"))

服务端

import socket
#创建一个socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#绑定ip端口  1024以下是系统的  参数是个元组
server.bind(('10.0.***.***',9000))
#监听 有几个客户端
server.listen(5)
print("服务器启动成功")
# 等待连接  参数1 同意socket对象 地址
clientSocket, clientAddress = server.accept()
print("%s----%s--\n连接成功"% (str(clientSocket), clientAddress))
while True:
    #接受数据
    data = clientSocket.recv(1024)
    print("收到"+str(clientAddress)+"的数据:"+data.decode("utf-8"))
    seed = input("请输入你返回的话")
    clientSocket.send(seed.encode("utf-8"))

UDP

客户端

import socket  #两种方式
import time
# clicent = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# clicent.connect(("10.0.***.***",8900))
# while True:
#     data = input("请输入数据")
#     clicent.send(data.encode("utf-8"))
#天王盖地虎*****

# clicent = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# clicent.connect(("10.0.***.***",8900))
# while True:
#     data = input("请输入数据")
#     clicent.sendto(data.encode("utf-8"),("10.0.126.198",8900))

clicent = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
while True:
    data = "老司机"
    clicent.sendto(data.encode("gbk"), ("10.0.***.**", 9090))
    time.sleep(1)

服务端

import socket
upServer = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
upServer.bind(("10.0.***.***", 8900))  #绑定IP 端口

while True:
    data,addr = upServer.recvfrom(1024)
    print("客户端说:", data.decode("utf-8"))

模拟飞秋


TCP是建立可靠的连接,并且通信双方都可以以流的形式发送给数据
先对于TCP,UDP则是面向无连接的协议

使用  UDP协议时,不需要建立连接,只需要知道对方IP地址和端口
就可以直接发送数据包。但是能不能到达就不知道了。

虽然UDP传输许数据不可靠,但优点是速度快,对于要求不高的数据可以使用UDP
192.168.56.1
'''
'''

'''
import socket
import time
str = "1_1bt4_10#32499#002481627512#0#0#0:1289671407:王者荣耀官方飞秋:b:288:收到请回复!"
udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp.connect(("10.0.***.***", 2425))
while True:
    udp.send(str.encode("gbk"))
    time.sleep(3)
    # break
 # for i in range(256):
 #     ip = "10.0.***.%d"%i
 #     udp.connect((ip, 2425))
 #     udp.send(str.encode("gbk"))
 #     time.sleep(0.1)

猜你喜欢

转载自blog.csdn.net/qq_42806416/article/details/81772639