实验环境搭建

接收端和发送

我在虚拟机win7启动一个网络调试工具
这个我已经启动了
在这里插入图片描述

创建套接字

代码

1
2
3
4
5
6
7
8
9
10
#导入库

import socket

#创建套接字
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)


#关闭套接字
s.close()

代码说明

  1. 导入socket
1
import socket
  1. Python 中,我们用 socket() 函数来创建套接字,语法格式如下
1
s=socket.socket(socket. AF_INET,SOCK_STREAM或者SOCK_DGRAM)

解释
第一个: socket. AF_INET是IPv4的意思
第二个: SOCK_STREAM和SOCK_DGRAM,如果填写SOCK_STREAM是tcp的意思,SOCK_DGRAM是udp的意思
3. 关闭socket

1
s.close()

向目标发送信息

  1. 发送端
    代码
1
2
3
4
5
6
7
8
9
10
11
#导入库
import socket

#创ipv4,和UDP类型的建套接字
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

#发送信息
s.sendto(b"1111",("192.168.31.207",8080))

#关闭套接字
s.close()

代码讲解
创建套接字上面已经说了
1.代码

1
s.sendto(b"abcd",("192.168.31.207",8080))

里面的参数
第一个:是发送到内容,应为他发送不支持字符串只支持bytes类型的所以就b就不是字符串了
看一下有b和没有b的类型
在这里插入图片描述

第二个:是目标(host)和端口(port),这个括号()是python的元组

看一下结果
在这里插入图片描述

  1. 发送代码升级替换b
    代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #导入库
    import socket

    #创ipv4,和UDP类型的建套接字
    s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

    #发送信息
    s.sendto("abcd".encode("utf-8"),("192.168.31.207",8080))

    #关闭套接字
    s.close()
    代码讲解
    添加一个encode(“utf-8”)就可以解决用b来代替了
    结果
    在这里插入图片描述
  2. 指定源端口
    代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #导入库
    import socket

    #创ipv4,和UDP类型的建套接字
    s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

    # 绑定源端口
    s.bind(("192.168.31.112",8080))

    #发送信息
    s.sendto("dsadsa".encode("utf-8"),("192.168.31.207",8080))

    #关闭套接字
    s.close()
    代码介绍
    1
    s.bind(("192.168.31.112",8080))
    绑定本地地址
    里面是一个元组里面
    第一个:是本地的IP
    第二个:是监听的本地的端口

接收

  1. 接收

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#导入库
import socket

#创ipv4,和UDP类型的建套接字
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

# 绑定IP和端口
s.bind(("192.168.31.112",8080))

# 接收数据
a=s.recvfrom(1024)

# 输出数据
print(a)

#关闭套接字
s.close()

代码介绍
1.代码

1
s.bind(("192.168.31.112",8080))

绑定本地地址
里面是一个元组里面
第一个:是本地的IP
第二个:是监听的本地的端口

2.代码

1
a=s.recvfrom(1024)

recvfrom()函数是用来接收UDP数据的,
大部分我们都是接收数据都是给他1024

结果
用网络调试工具发数据
在这里插入图片描述
看一下这个已经接收到了数据
在这里插入图片描述
2. 接收代码升级
代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#导入库
import socket

#创ipv4,和UDP类型的建套接字
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

# 绑定IP和端口
s.bind(("192.168.31.112",8080))

# 接收数据
a=s.recvfrom(1024)

# 元组分割
b=a[1][0]
c=a[1][1]
d=a[0]
# 输出结果
print("目标",b)
print("端口",c)
print("发送的数据是",d.decode('utf-8'))

#关闭套接字
s.close()

代码介绍
1.代码

1
2
3
b=a[1][0]
c=a[1][1]
d=a[0]

如果不进行分割看一下他的元组
在这里插入图片描述
应为接收的数据是元组格式格式的里面有发的数据和ip端口
这个就进行分割了
2.代码

1
2
3
print("目标",b)
print("端口",c)
print("发送的数据是",d.decode('utf-8'))

这个分割出来了输出结果
应为数据需要解码所以就用decode(‘utf-8’)进行解码