UDP 协议通信服务器端客户端
UDP 协议进行通信
——服务器端
UDP程序实例的基本使用情况和使用方法
这个系统由服务器程序udps和客户及程序udpc两个程序组成,如果从客户机出入一个特定命令,并将这个命令发送到udps中去处理,其执行结果将在客户机的屏幕上显示出来。
1、在执行程序的时候,首先启动一个服务器程序。
端口号是该服务器程序所指定的一个接收包的端口号,客户机必须向该处发送包。在执行上述程序后则执行下面的客户机程序
2、“服务器的IP”也可以使用服务器的主机名或域名。
若两个程序在一台电脑上则服务器IP用127.0.0.1;若不在一台电脑上则服务器的IP用其所在电脑的IP(要求两台电脑能Ping通)。客户端输入的端口号必须是服务器指定的端口。
客户机方可以输入C:\\Windows\\System32\\下可执行的命令
如:help、arp、route print、quit等
从键盘上输入的字符原封不动的发送给服务器程序后,在服务器程序中则执行该字符串相对应的命令,并将执行结果发送给客户机程序。
程序的执行实例和流程图
在这个实例中服务器的IP为白兰兰的IP(125.219.181.97)
在客户机端输入route print命令,则显示服务器的路由寻址表如下(不全)
服务器端的信息
如果输入help后没有任何反应,请确认udpc程序所指定的IP地址是否正确。若正确,再确认一下该IP地址的主机udps是否启动;再确认这些以后,如果执行udpc程序仍没有任何显示,那么请使用ping命令来检查通信是否能够进行,因为UDP协议属于无连接型通信,所以即使发生错误,也很难知道。
如果输入的命令一直是正确的,则只显示第一个命令,其余的都隐藏了。直到输入错误时,服务器端才有错误提示,如:
处理流程
无论是服务器端还是和客户端,首先都要初始化套接口环境再创建一个套接口,利用bind()系统调用来绑定端口号和IP,只有这样才能使用UDP协议发送和接收一个包,但时至次计算机网络中还没有传输任何一个包。
对于客户机而言,如果从键盘上输入命令,在客户机上执行sendto()系统调用,向服务器发送包,那么在发送包之后,客户机则执行recvfrom()系统调用,等待从服务器返回的报文。
如果服务器收到从客户机发来的报文,则调用execute()和chulicom()函数。实质是调用C:\\Windows\\System32\\中的可执行程序。若存在该命令则给予客户机响应,若不存在输出 :您输入错误的命令。若命令不完整,服务器给出提示。
这些操作反复进行,如果在客户机上输入字符串quit,则程序运行结束。
在使用UDP协议时,即使客户机程序运行结束,也不讲这个事实传递给服务器。UDP协议进行的通信的基本模式,只是传递命令的请求包和应答包,并不传输其他包,因此通信方式简单。
客户机的处理 服务器的处理
客户机循环,从键
盘上输入,当不是
EOF的时候反复进行服务器循环接收报文
Recvfrom()
、
服务器循环
客户机循环
4、UDP服务器源程序及说明
#include
#include
#include
#include
#pragma comment (lib, "ws2_32.lib")
#define BUFSIZE 65500
enum{CMD_NAME,DST_PORT};
int execute(char * command, char *buf,int bufmax);
void chulicom(char *buff ,char *send_buf);
void main(int argc,char *argv[]){
struct sockaddr_in server;
struct sockaddr_in client;
char recv_buf[BUFSIZE];
char send_buf[BUFSIZE];
int resize;
memset(recv_buf,0,sizeof(recv_buf));
memset(send_buf,0,sizeof(send_buf));
char if_;
SOCKET sk;
int serverport=12345;
if (argc==1) /