求给个windows 下原始套接字的示例程序,要求使用C语言,不使用MFC。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求给个windows 下原始套接字的示例程序,要求使用C语言,不使用MFC。相关的知识,希望对你有一定的参考价值。

谁给推荐的答案?能不能专业点?
socket(AF_INET, SOCK_DGRAM, 0)这不是 UDP 套接字吗?
我要的是原始套接字,谢谢。

参考技术A #include <Winsock2.h>

void main()

WORD wVersionRequested;
WSADATA wsaData;
WSAStartup( wVersionRequested, &wsaData );

//创建套接字,SOCK_DGRAM套接字类型,0推荐协议
SOCKET sockSrv = socket(AF_INET, SOCK_DGRAM, 0);

SOCKADDR_IN addrSrv;
//INADDR_ANY允许套接字向任何分配给本机器的IP地址发送和接收数据,可能有多个网卡
//htonl, 将u_long 从主机字节序转换为网络字节序
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSrv.sin_family = AF_INET;//指定地址族
addrSrv.sin_port = htons(6002);//端口号,htons,将u_short从主机字节序转换为网络字节序

//绑定
bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
while(1)
//等待接收数据
recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient, &len);
.......................
追问

大侠,这是UDP啊,我有的是SOCK_RAW 原始套接字。。。

本回答被提问者和网友采纳
参考技术B 。。

MS Windows 套接字示例对我不起作用 [关闭]

【中文标题】MS Windows 套接字示例对我不起作用 [关闭]【英文标题】:MS Windows socket example not working for me [closed] 【发布时间】:2016-03-17 19:46:26 【问题描述】:

我正在尝试运行here 概述的 Windows 套接字示例

在 VS 调试器中运行服务器代码,它挂在 accept() 调用上(第 84 行)。

由于我很确定大约有一百万人成功运行了此程序,我猜这不是代码,而是我的环境中的某些东西。我正在运行 Windows 7,VS Community 2015。关于我应该检查哪些设置以使这个看似简单的示例正常工作有什么建议吗?

编辑:也为 .NET 4.5.2 构建,如果有帮助的话。

谢谢。

【问题讨论】:

【参考方案1】:

预计代码一旦到达 accept() 调用就会挂起,这是服务器等待客户端连接以便继续的地方。您应该从here 编译示例客户端并在服务器启动并运行后运行它。一旦客户端点击 connect() 调用,您应该会看到接受返回。

【讨论】:

谢谢。我以为它工作正常,但这次我单步执行客户端并在 connect() 上收到 WSAECONNREFUSED 错误。 WSAECONNREFUSED 表示连接被主动拒绝。如果 1) 客户端尝试连接到根本不侦听客户端的服务器 IP:Port,则可能会发生这种情况。已到达 IP,但端口未打开。 2)IP到达,端口打开,但是端口的待处理客户端的积压已满。在服务器有机会从其积压中接受一些客户端之后再试一次。 3) 防火墙阻止了连接。不幸的是,客户端无法知道这些条件中的哪一个导致WSAECONNREFUSED,它所能做的就是稍后再试。

以上是关于求给个windows 下原始套接字的示例程序,要求使用C语言,不使用MFC。的主要内容,如果未能解决你的问题,请参考以下文章

Python 原始套接字 (Windows):嗅探以太网帧

Windows:要求 Socket 传递所有数据包(甚至是损坏的数据包)

如何在 Python 中使用原始套接字?

为啥数据不通过 Windows 中的原始套接字发送

原始套接字

提升原始套接字