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);