to fengge8ylf:
那sendto函数返回的值有是什么呢?难道只是返回是否成功把数据拷到系统缓冲区?如果这样的话就不可能有失败呀.因为作为UDP协议又不需要握手协议,系统内部拷贝后就不用管了,为什么还会返回发送失败?而且在数据块的大小可以直接影响发送结果,至少证明sendto有一定的检测发送是否成功的能力.
前段时间忙别的去了,没有回来讨论问题,现在继续.
上次我贴的程序只是模仿我正在做的项目,所以不带针对性,现在我把循环改了改,大家再试试,然后都说说自己的想法.
// TestSendTo.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <stdio.h>
#include <winsock2.h>
int main(int argc, char* argv[])
{
DWORD LastTime;
DWORD Curtime;
DWORD EscpTime;
WSADATA wsaData;
long addr;
long wrc;
long lngSendTimeOut = 1000;
long lngRecvTimeOut = 1000;
SOCKADDR_IN sockObject;
SOCKET sSend;
char transbuf[1025] ; //这是BUF的大小,也是直接影响发送结果的地方
char IPADDR[17];
memset(transbuf,'a',sizeof(transbuf));
我的结果:
Send Some Data To 192.168.1.1 1,Use Time:47 ms
Send Some Data To 192.168.1.1 2,Use Time:0 ms
。。。。。。
Send Some Data To 192.168.1.134,Use Time:0 ms
我运行结果如下:
Send Some Data To 192.168.0.1 1,Use Time:10 ms
Send Some Data To 192.168.0.1 2,Use Time:0 ms
Send Some Data To 192.168.0.1 3,Use Time:0 ms
Send Some Data To 192.168.0.1 4,Use Time:0 ms
Send Some Data To 192.168.0.1 5,Use Time:0 ms
Send Some Data To 192.168.0.1 6,Use Time:0 ms
Send Some Data To 192.168.0.1 7,Use Time:0 ms
Send Some Data To 192.168.0.1 8,Use Time:0 ms
Send Some Data To 192.168.0.1 9,Use Time:0 ms
Send Some Data Failed!
Send Some Data Failed!
Send Some Data Failed!
Send Some Data Failed!
Send Some Data Failed!
Send Some Data Failed!
Send Some Data Failed!
Send Some Data Failed!
Send Some Data Failed!
Send Some Data Failed!
Send Some Data To 192.168.0.120,Use Time:0 ms
Send Some Data Failed!
Send Some Data To 192.168.0.122,Use Time:0 ms
Send Some Data Failed!
Send Some Data Failed!
Send Some Data To 192.168.0.125,Use Time:0 ms