windows下socket 编程可以用 writer函数发UDP吗及发包效率问题

低调华龙 2008-07-09 02:14:02
各位大哥,小弟现在有出问题了,现在是把linux下的socket发udp包程序改为windows的,但是在windows下在vc++6.0中用到write&read 函数时都是报错,我根据错误自己查找改着不报错了,但是在运行时,都返回-1,也就是不可以使用,希望大家可以帮帮忙.谢谢!!
还有就是这样不行后,我使用了sendto()函数,可是这个函数的效率太低了不知道是我用错了还是有别的效率更好的发UDP包的函数,请指教!谢谢
为了大家可以更好的帮我我把函数也贴出来请大家帮帮忙!再次谢谢!
#include <winsock2.h>
#include <string.h>
#define MAX_SIZE 1400
#define SERV_PORT 8088
/*还要接库 "ws2_32.lib"*/

CString strip,strlen,strnum;

m_len.GetWindowText(strlen);
m_num.GetWindowText(strnum);
static int len,number;
DWORD ipaddr;
struct sockaddr_in servaddr;
char buf[MAX_SIZE];
int i,err;
((CIPAddressCtrl *)GetDlgItem(IDC_IPADDRESS1))->GetAddress(ipaddr);
len = strtol(strlen,NULL,10);
number = strtol(strnum,NULL,10);
if(len == NULL && len<0)
{
AfxMessageBox(" 老大 :长度不能为空和小于0");
}


/* if(argc != 3)
{
printf("useage:udpclient<IPaddress>;\n");
exit(1);
}

*/ memset(&servaddr,'0',sizeof(servaddr));
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );//通知操作系统,启用SOCKET的DLL库

if ( err != 0 )
{
return;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup( );//解除与Socket库的绑定并且释放Socket库所占用的系统资源
return;
}

SOCKET sockClient = socket( AF_INET , SOCK_DGRAM , 0 ) ;

struct sockaddr_in addrSrv ;
addrSrv.sin_addr.S_un.S_addr = htonl(ipaddr) ;
addrSrv.sin_family = AF_INET ;
addrSrv.sin_port = htons(SERV_PORT) ;


if(connect(sockClient,(struct sockaddr *)&addrSrv,sizeof(addrSrv)) == -1)
{
closesocket(sockClient);
AfxMessageBox("connect error!");
exit(1);
}
/*else
{
AfxMessageBox(" 老大 :connect server ok!");
}*/
memset(buf,'*',len);
for(i = 0;i<number;i++)

{
// write(sockClient,buf,len);
sendto(sockClient,buf, len , 0 , (SOCKADDR*)&addrSrv , sizeof(SOCKADDR)) ;
}
closesocket(sockClient);
AfxMessageBox(" 老大 :send complete!");
exit(1);
...全文
191 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
低调华龙 2008-07-10
  • 打赏
  • 举报
回复
我用多线程完成了我的需求
lin_style 2008-07-09
  • 打赏
  • 举报
回复
先去掉试试嘛,看对速度有没提升
用GetLastError来取得错误号。看下是什么错误
低调华龙 2008-07-09
  • 打赏
  • 举报
回复
大哥为什么要去呢?
我不懂希望你给好好的详细介绍介绍
lin_style 2008-07-09
  • 打赏
  • 举报
回复
把connect去掉
低调华龙 2008-07-09
  • 打赏
  • 举报
回复
我测试的环境都是在千兆网卡,千兆交换机.在同样环境下两台linux可以达到 998m/s也就是达到要求是用的write()函数,但是在windows中就只有139m/s速度远远没达到要求

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧