|
tcp/ip client 프로그램을 짜고 있는데
연결은 되는데, send를 하면 받는 쪽에서는 아무런 반응이 없습니다.
고수들의 한 수를 기대합니다.
몇일째 고생하고 있습니다.
=========<source>======================
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD( 2, 2 );
WSAStartup(MAKEWORD(2,2), &wsaData);
SOCKET socket;
unsigned int addr;
int socket_type = SOCK_STREAM;
struct sockaddr_in server;
struct hostent *hp;
LPSTR server_name = _ipAddress.c_str();
if(isalpha(server_name[0]))
{
hp = gethostbyname(server_name);
if(hp == NULL) return ;
memcpy((char *)&addr, hp->h_addr, hp->h_length);
}
else
{
addr = inet_addr(server_name);
}
memset(&server,0,sizeof(server));
server.sin_addr.s_addr = addr;
server.sin_family = AF_INET;
server.sin_port = htons(_port);
BOOL bZero = TRUE;
int nZero = 0;
int nInterval = 1000;
try
{
socket = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_IP, NULL, 0, WSA_FLAG_OVERLAPPED);
int nRet = setsockopt(socket, IPPROTO_TCP, TCP_NODELAY, (char *)&bZero, sizeof(BOOL));
nRet = setsockopt(socket, SOL_SOCKET, SO_RCVBUF, (char *)&nZero, sizeof(int));
nRet = setsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, (char *)&nInterval, sizeof(int));
if (connect(socket,(struct sockaddr*)&server,sizeof(server)) == SOCKET_ERROR )
{
strLog.printf("\t[소켓 생성실패] (IP:%s)\t (PORT:%d)", _ipAddress, _port);
return ;
}
strLog.printf("\t[소켓 생성] (IP:%s)\t (PORT:%d)", _ipAddress, _port);
}
catch(...)
{
closesocket(socket);
return ;
}
try
{
// CCTV로 패킷 전송
int nErr = 0;
DWORD dwSendNumBytes = 0;
DWORD dwSendLen = 0;
if(socket != INVALID_SOCKET)
{
DWORD dwFlags = 0;
WSABUF wsaBuf;
wsaBuf.buf = (char *) (sMsgSndCCTV.c_str());
wsaBuf.len = sMsgSndCCTV.Length();
nErr = WSASend(socket, &wsaBuf, 1, &dwSendNumBytes, dwFlags, NULL, NULL);
if (nErr == SOCKET_ERROR)
{
strLog.printf("\t CCTV 전송실패");
}
else
{
strLog.printf("\t CCTV 전송완료");
char chrMsgRcvCCTV[1000];
memset( chrMsgRcvCCTV, 0x00, 1000 );
DWORD dwFlag = 0;
DWORD dwRead;
WSABUF wsabuf;
wsabuf.buf = chrMsgRcvCCTV;
wsabuf.len = 1;
nErr = WSARecv(socket, &wsabuf, 1, &dwRead, &dwFlag, NULL, NULL);
if(nError == SOCKET_ERROR && (WSA_IO_PENDING!=WSAGetLastError()))
{
return SOCKET_ERROR;
}
if ( nErr == 0 )
{
sMsgRcvCCTV = *chrMsgRcvCCTV;
strLog.printf("\tCCTV에서 받은 메세지 : %s", sMsgRcvCCTV);
}
else
{
strLog.printf("\tCCTV 수신 오류");
}
}
}
}
catch(Exception &E)
{
strLog.printf("\t송신 에러: %s\r\n", E.Message );
}
|