版权声明:本文为博主原创文章,转载请注明博客地址: https://blog.csdn.net/zy010101/article/details/88639774
首先,回顾一下。在我们使用Socket编程之前的一些网络的概念。
IP:它是用来标识处于Internet之中的端系统的。
MAC:它是用于在同一局域网中标识不同的计算机的。
端口号:它是用来标识同一台主机上不同的网路应用程序的。
套接字成为了应用程序进行通信的一种抽象机制。每一个进程都有一个或者多个套接字。当生成一个套接字的时候,就会为它分配一个端口号。我们是在C/S架构上应用UDP套接字编程。那么,服务器总是在等待客户端的请求。客户端在请求的时候,它会告知目的地址(服务器的IP地址和目的进程的端口号)。
下面是服务器代码:
#python3实现循环无连接服务器
#包含socket库
from socket import *;
#服务器端口
server_port = 8000;
#创建套接字,设置Ipv4地址以及指定UDP连接
server_socket = socket(AF_INET,SOCK_DGRAM);
#绑定IP地址和端口号。监听该端口
server_socket.bind(('',server_port));
while True:
print("receive data:");
#从客户端发来的包中获取数据存放在data中,将源地址放在client_address中。
#设置缓存大小为4096。完成这些功能需要使用函数recvfrom.
data,client_address = server_socket.recvfrom(4096);
print(data.decode()); #打印客户端的数
server_socket.sendto("success!",client_address);
server_socket.close();
客户端代码:
#python3实现的客户端代码
#包含网络模块
from socket import *;
#服务器地址以及端口号
#127.0.0.1是本地回环地址,经常用来进行测试,也可以使用域名localhost来代替该ip地址
server_address = '127.0.0.1';
server_port = 8000;
#创建套接字 ipv4地址以及UDP协议
client_socket = socket(AF_INET,SOCK_DGRAM);
while True:
data = input("please input:");
client_socket.sendto(data.encode(),(server_address,server_port));
recv,server_addr = client_socket.recvfrom(4096);
print(recv.decode());
client_socket.close();
运行结果如下:
这个就是运行结果。
总的来说,在使用UDP作为传输层协议的时候,客户端需要知道服务器的IP地址和目的端口号。由于UDP是面向无连接的协议,因此,客户端使用sendto函数来发送。创建套接字的时候注意UDP是SOCK_DGRAM。服务器也使用sendto函数来发送响应给客户端。recvfrom函数能够接受包,并知晓客户端的地址。