Образец кода для управления через Ethernet или через telnet переключателя видео
У нас есть ВИДЕОПЕРЕКЛЮЧАТЕЛЬ NTI (модель SM-nCm-15V-LC серии Veemux), которым мы должны управлять через ethernet. Если я подключусь к нему через сеанс telnet, то смогу отправлять команды, и коммутатор будет работать просто отлично. Мы закодировали какой-то код ethernet, чтобы отправить те же команды на коммутатор, и он не работает. Я связался с NTI, который прислал мне ссылку на какой-то общий код telnet, но этот код открывает окно telnet, которое я не хочу делать. Они говорят, что у них нет никакого образца кода, чтобы отправить мне.
Кто-нибудь делал это раньше? Я прикрепил код (без какого-либо конкретного кода telnet), так что, может быть, я что-то упускаю? Я знаю, что порт 2005 прав (согласно документации плюс он работает в окне Putty telnet).
Любая помощь будет очень признательна!
Что я уже пробовал:
void CVideoSwitchControl::Initialize() { vidSwitchPort = 2005; //Set up networking WSADATA wsaData; HRESULT hr; hr = WSAStartup(MAKEWORD(2, 2), &wsaData); if (hr != 0) { //Something went wrong AfxMessageBox("Error with setting up networking..."); exit(0); } //Create socket vidSwitchSock = socket(AF_INET, SOCK_STREAM, 0); if (vidSwitchSock == INVALID_SOCKET) { //Something went wrong AfxMessageBox("Error creating socket."); WSACleanup(); exit(0); } //Setup connection criteria to switch vidSwitchAddr.sin_family = AF_INET; hr = inet_pton(AF_INET, "192.168.1.30", &vidSwitchAddr.sin_addr); if (hr < 0) { //Something went wrong... AfxMessageBox("Failed to resolve IP of switch."); exit(0); } vidSwitchAddr.sin_port = htons(vidSwitchPort); //Attempt to establish connection hr = connect(vidSwitchSock, (SOCKADDR *)&vidSwitchAddr, sizeof(vidSwitchAddr)); if (hr == SOCKET_ERROR) { //Something went wrong... AfxMessageBox("Failed to establish connection to switch."); WSACleanup(); exit(0); } char buff[10]; //Any response from the switch after connection? bytesRecv = recv(vidSwitchSock, (char*)&buff, sizeof(buff), 0); if (bytesRecv == SOCKET_ERROR || bytesRecv== 0) { //Something went wrong... AfxMessageBox("Switch not responding."); WSACleanup(); exit(0); } //What did we get back? //if we got response, we're in and the switch in ready for control return; } void CVideoSwitchControl::SetVideoSwitch(int channel, OutputMonitor monitor) { //did we receive valid channel and monitor values? if (channel >= MaxInputs) { //Invalid input channel AfxMessageBox("Invalid input selected for video switch."); exit(0); } if (monitor >= MaxMonitors) { //Invalid monitor selected for output AfxMessageBox("Invalid output monitor selected for video switch."); exit(0); } //Pack up CS message bytes 5 and 8 CSMessage[4] = (char)inputMap[channel - 1]; CSMessage[7] = (char)outputMap[monitor - 1]; //Send CS message to video switch bytesSent = send(vidSwitchSock, (char*)&CSMessage, sizeof(CSMessage), 0); if (bytesSent == SOCKET_ERROR || bytesSent == 0) { //Video switch not responding AfxMessageBox("Video switch not responding."); WSACleanup(); return; } //Maybe check for what the switch responds?... return; }
Gerry Schmitz
Соединение в первую очередь должно быть самой трудной частью. Я думаю, что этот материал проще в C# и .NET, судя по всему.
Rick York
Мой совет-запустить Wireshark и отслеживать трафик на соединении с окном telnet, чтобы вы могли точно видеть, какие пакеты передаются. Он имеет встроенный фильтр для пакетов telnet, поэтому он должен быть довольно простым, чтобы увидеть, что вам нужно сделать.