stream!=NULL
感觉问题应该是出在后面往图片里面写数据的地方,但是不知道哪里错了!接收几百个后就报错
#include "stdafx.h"
#include <winSock2.h>
#include<iostream>
using namespace std;
#pragma comment( lib, "ws2_32.lib")
#define SIO_UDP_CONNRESET _WSAIOW(IOC_VENDOR, 12)
SOCKET udpClientSocket;
int errorCode = 0;
DWORD WINAPI recvFromUdpServer(LPVOID param);
SOCKADDR_IN udpServerAddr;
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA wsaData;
WORD version = MAKEWORD(2,2);
int ret = WSAStartup(version,&wsaData);
if(ret != 0)
{
printf("WSAStartup failed\n");
return(0);
}
udpClientSocket = socket(AF_INET,SOCK_DGRAM,0);
if(udpClientSocket == INVALID_SOCKET)
printf("udpClientSocket create failed\n");
SOCKADDR_IN udpClientAddr;
udpClientAddr.sin_family = AF_INET;
udpClientAddr.sin_port = htons(50001);
//udpClientAddr.sin_addr.S_un.S_addr = inet_addr("192.168.1.108");
udpClientAddr.sin_addr.S_un.S_addr = inet_addr("169.254.201.70");
ret = bind(udpClientSocket,(SOCKADDR*)&udpClientAddr,sizeof(SOCKADDR));
if(ret == SOCKET_ERROR)
printf("udpSocket bind error\n");
udpServerAddr.sin_family = AF_INET;
udpServerAddr.sin_port = htons(50002);
//udpServerAddr.sin_addr.S_un.S_addr = inet_addr("192.168.1.108");
udpServerAddr.sin_addr.S_un.S_addr = inet_addr("169.254.40.41");
//如果发送的目的地址不可达,接收时忽略收到的ICMP包
BOOL bNewBehavior = FALSE;
DWORD dwBytesReturned = 0;
WSAIoctl(udpClientSocket, SIO_UDP_CONNRESET, &bNewBehavior, sizeof bNewBehavior, NULL, 0, &dwBytesReturned, NULL, NULL);
HANDLE hThread;
DWORD dwThread;
hThread = ::CreateThread(NULL,NULL,recvFromUdpServer,NULL,0,&dwThread);
char a[10];
memset(a,1,10);
for(int i=0; i<10;i++)
{
ret = sendto(udpClientSocket, a, i, 0,(SOCKADDR*)&udpServerAddr,sizeof(SOCKADDR));
Sleep(10);
}
cout<<"already send"<<endl;
while(1)
Sleep(1000);
return 0;
}
DWORD WINAPI recvFromUdpServer(LPVOID param)
{
char recBuf[102400];
int ret;
sockaddr_in addrSrc;
int len = sizeof(sockaddr_in);
int errorCode;
while(1)
{
ret = recvfrom(udpClientSocket,recBuf,102400,0,(SOCKADDR*)&addrSrc,&len);
if(ret == SOCKET_ERROR)
{
errorCode = WSAGetLastError();
//return(0);
}
printf("udp receive data len = %d\n",ret);
char st[]="D:\\新建文件夹\\result.jpg";
FILE *fp=fopen(st,"w");
fwrite(recBuf,sizeof(char),100000,fp);
if(false)
{
closesocket(udpClientSocket);
printf("udp recv Thread exit\n");
return(1);
}
}
}