16 進数のメッセージを送信してビデオ サーバー コントロールと通信するソケット プログラムを実行しています。何が起こっているのかを何度も理解しようとしましたが、まだエラーを見つけられませんでした。
これが私の完成したコードです:
void UsingWinSock()
{
u_short port;
int ret;
struct sockaddr_in my_addr;
int lenAddrs;
CString remoteAddress;
b1 = 192;
b2 = 168;
b3 = 11;
b4 = 2;
remoteAddress.Format("%u.%u.%u.%u", b1, b2, b3, b4);
port = (u_short)(portNumber);
// remote address
memset(&remote_addr, 0, sizeof(remote_addr));
remote_addr.sin_family = PF_INET;
remote_addr.sin_port = htons(port);
inet_pton(AF_INET, remoteAddress, (&remote_addr.sin_addr));
// socket
sckSloMo = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sckSloMo == INVALID_SOCKET)
{
AfxMessageBox("sckSloMo is invalid!!");
return;
}
if (sckSloMo != SOCKET_ERROR)
{
ret = connect(sckSloMo, (const sockaddr*) &remote_addr, sizeof(remote_addr));
if (ret != SOCKET_ERROR)
{
m_status = "Connected!!";
SetDlgItemText(IDC_STATIC_STATUS, m_status);
}
else
{
m_status = "connect error!!!";
SetDlgItemText(IDC_STATIC_STATUS, m_status);
OnBnClickedButtonCancel();
}
}
else if (ret == SOCKET_ERROR)
{
AfxMessageBox("socket not Ok");
return;
}
}
void StartSendingMessages()
{
int retorno;
const int bufLen = 7;
CString TextRetorno;
CString messageSend;
HEX_bufferMessage = new CHAR[bufLen]; // alocando espaço
// specifies the led state
HEX_bufferMessage[0] = 0xF0;
HEX_bufferMessage[1] = 0x15;
HEX_bufferMessage[2] = 0x31;
HEX_bufferMessage[3] = 0x04;
HEX_bufferMessage[4] = 0x02; // green
HEX_bufferMessage[5] = 0x0E; // C1
HEX_bufferMessage[6] = 0xF7;
retorno = send(sckSloMo, HEX_bufferMessage, bufLen, 0);
if (retorno == SOCKET_ERROR || retorno < 0 || retorno == INVALID_SOCKET)
{
AfxMessageBox("Error Send!!");
return;
}
else if(retorno != 0)
{
AfxMessageBox("Send() OK !!");
}
}
エラーは発生しませんが、ビデオ サーバー コントローラーは何もしません。私のプログラムで何が起こっているのか、誰にも分かりますか?