윈도우즈에서udp 연결 & 패키지 분실 해결
#pragma comment (lib,"ws2_32.lib")
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA wsaData;
int error=WSAStartup(MAKEWORD(1,1),&wsaData);
if(error!=0)
{
return -1;
}
if(LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1)
{
WSACleanup();
return -1;
}
SOCKET s=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN sockSrc;
sockSrc.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
sockSrc.sin_port=htons(8888);
sockSrc.sin_family=AF_INET;
bind(s,(SOCKADDR *)&sockSrc,sizeof(SOCKADDR));
unsigned char recBuff[32*1024];
setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&recBuff,sizeof(int));
memset(recBuff,0,32*1024);
SOCKADDR_IN sockRec;
int len=sizeof(SOCKADDR);
int x=-1;
int i = 1;
FILE* pf;
if(0 != fopen_s(&pf, ".//receive.txt","a+"))
{
printf("fopen error!
");
}
while(1)
{
x=recvfrom(s,(char*)recBuff,sizeof(recBuff),0,(sockaddr *)&sockRec,&len);
printf("the receive is:
");
for(int i = 0; i < x; i++)
{
printf("%d",recBuff[i]);
}
printf("
");
fwrite(recBuff,x,1,pf);
memset(recBuff,0,32*1024);
printf("receive:%d num is %d============================
",x,i++);
}
closesocket(s);
fclose(pf);
WSACleanup();
return 0;
}
클라이언트:
#include "stdafx.h"
#pragma comment (lib,"ws2_32.lib")
int _tmain(int argc, _TCHAR* argv[])
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return -1;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup( );
return -1;
}
SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.31.127");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(8888);
while(1)
{
sendto(sockClient,"Hello",strlen("Hello")+1,0,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
}
closesocket(sockClient);
WSACleanup();
return 0;
}
서버가 보낸 데이터는 5*256개의char 데이터입니다. 서버를 작성할 때 캐시 구역을char[2000]로 설정합니다.그리고 매번 받은 데이터를 인쇄합니다.그리고 가방을 잃어버리는 현상이 발견되었다.나중에 지도를 받다.강의 캐시 구역이 크게 바뀌었다.문제가 해결되었다.
서버를 작성할 때 캐시 영역을char[2000]로 설정합니다.서비스 쪽에서 보낸 데이터를 수신하는 데 쓰인다.서버
int nRecvBuf=32*1024;//32K로 설정하고 설정을 바꾸세요.
그리고 setsockopt라는 함수를 통해 socket에 알립니다.setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));
서버를 작성할 때 캐시 영역을char[2000]로 설정합니다.서비스 쪽에서 보낸 데이터를 수신하는 데 쓰인다.서버
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.