UDP的ICMP差错的测试程序
程序员文章站
2022-06-30 18:20:58
...
/*
作者:张亚霏
2008-12-03早
*/
/*
UDP主机不可达、端口不可达测试
*/
/*
向一个已知主机的打开端口发一个UDP包,无任何异常
*/
/*
向一个已知主机的未打开端口发一个UDP包
主机返回一个ICMP端口不可达报文
结果就是之后的recvfrom返回-1
GetLastError() WSAECONNRESET
or
errno ECONNRESET
*/
/*
向一个未知主机的某端口发一个UDP包
可能无任何回应
也可能是中间路由器返回一个ICMP主机不可达报文,但是这种情况很少见
结果就是之后的recvfrom返回-1
GetLastError() WSAEHOSTUNREACH
or
errno EHOSTUNREACH
*/
#if defined WIN32 || defined _WIN32
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
int init_net()
{
WSADATA wsa_data;
return 0 != WSAStartup(MAKEWORD(2,2), &wsa_data);
}
void uninit_net()
{
WSACleanup();
}
int close_socket(SOCKET s)
{
return closesocket(s);
}
int get_last_error()
{
return WSAGetLastError();
}
#else
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <netdb.h>
#include <errno.h>
int init_net()
{
return 1;
}
void uninit_net()
{
}
typedef int SOCKET;
int close_socket(SOCKET s)
{
return close(s);
}
int get_last_error()
{
return errno;
}
#endif
#define BUFFER_SIZE 1024
#define DEST_ADDRESS "127.0.0.1"//"192.168.1.2"
#define DEST_PORT 27015//1037
int main()
{
SOCKET send_socket;
struct sockaddr_in recv_addr;
char send_buf[BUFFER_SIZE];
char recv_buf[BUFFER_SIZE];
int ret;
fd_set read_set;
struct timeval time_out;
init_net();
send_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
recv_addr.sin_family = AF_INET;
recv_addr.sin_port = htons(DEST_PORT);
recv_addr.sin_addr.s_addr = inet_addr(DEST_ADDRESS);
ret = sendto(send_socket,
send_buf,
BUFFER_SIZE,
0,
(struct sockaddr*) &recv_addr,
sizeof(recv_addr));
FD_ZERO(&read_set);
FD_SET(send_socket, &read_set);
time_out.tv_sec = 1;
time_out.tv_usec = 0;
ret = select(send_socket+1, &read_set, NULL, NULL, &time_out);
if(ret == 1 && FD_ISSET(send_socket, &read_set))
{
ret = recvfrom(send_socket, recv_buf, BUFFER_SIZE, 0, NULL, NULL);
if(ret == -1)
{
printf("get_last_error() %d\n", get_last_error());
perror(NULL);
}
}
close_socket(send_socket);
uninit_net();
return 0;
}
推荐阅读
-
编写Go程序对Nginx服务器进行性能测试的方法
-
非常不错的flash采集程序测试通过
-
微信小程序授权 获取用户的openid和session_key【后端使用java语言编写】,我写的是get方式,目的是测试能否获取到微信服务器中的数据,后期我会写上post请求方式。
-
程序运行时间测试 - 使用libc 中 time 函数 实现秒级的运行时间检测
-
PHP测试程序运行时间的类
-
II7添加应用程序测试时 无法验证对路径(c: estWcfService)的访问
-
使用C#实现基于TCP和UDP协议的网络通信程序的基本示例
-
小程序测试后台服务的方法(ngrok)
-
.NET程序员项目开发必知必会—Dev环境中的集成测试用例执行时上下文环境检查(实战)
-
非常不错的flash采集程序测试通过