cket의recv는 매우 느려요. 왜요?
//
CString CMySock::GetMemberInfo(char requestUrl[],char Data[])
{
char RequestData[1024];
strcpy(RequestData,Data);
LPHOSTENT lphost= gethostbyname(requestUrl);
sockaddr_in server;
server.sin_family = AF_INET;
//server.sin_addr.s_addr = ((LPIN_ADDR)lphost->h_addr)->s_addr;
server.sin_addr.s_addr = inet_addr(requestUrl);
server.sin_port = htons(this->m_Port);
if (connect(this->m_ManagerSock, (struct sockaddr *)&server, sizeof(struct sockaddr)) == SOCKET_ERROR){
MessageBox(NULL,_T(" , !"),_T(" "),MB_OK|MB_ICONINFORMATION);
closesocket(this->m_ManagerSock);
return NULL;
}
int retval= send(this->m_ManagerSock,RequestData,sizeof(RequestData)-1,0);
char buffer[1024]={0};
CString strResult;
//char resultBuffer[1024] = "";
while( SOCKET_ERROR!= retval && retval>0)
{
if (SOCKET_Select(this->m_ManagerSock))
{
ZeroMemory(buffer,sizeof(buffer));
retval = recv(this->m_ManagerSock ,(char*)buffer,sizeof(buffer),0);
strResult += buffer;
}
}
return strResult;
}
다른 함수에서 호출하기
char sz[] = "GET /verfiy.php?type=memberinfo HTTP/1.1
"
"Host: 127.0.0.1
"
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
"
"Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
"
"User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0
";
CMySock mySock;
char requestUrl[128] = "127.0.0.1";
CString memberInfo = mySock.GetMemberInfo(requestUrl,sz);
질문:
socket의recv를 사용하여 데이터를 받아들일 때 매우 느리고 2초 정도 차이가 나지 않으며 요청한 데이터는 20줄도 안 된다(주: 요청한 것은 로컬에서 만든 php 페이지이기 때문에 속도가 이렇게 느릴 수 없다)
바로:
while( SOCKET_ERROR!= retval && retval>0)
{
if(SOCKET Select(this->m ManagerSock)//if문 내부에 들어가려면 2초 정도 기다려야 합니다. 즉 버퍼에 서버에서 되돌아오는 데이터가 있는 것입니다.
{
ZeroMemory(buffer,sizeof(buffer));
retval = recv(this->m_ManagerSock ,(char*)buffer,sizeof(buffer),0);
strResult += buffer;
}
}
해결 방법:
기본적으로 요청 메시지 헤더의 연결 기본값은keep-alive이기 때문에 요청 헤더에 "연결: close\r"를 추가하면 됩니다.또한apache의 프로필을 통해keepalive를off로 설정할 수 있습니다 (권장하지 않음)
판권 소유, 전재를 환영하지만, 전재는 일찍이 토목인이었다는 것을 명기해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.