cotsjdixon Ответов: 0

Образец кода для управления через 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, поэтому он должен быть довольно простым, чтобы увидеть, что вам нужно сделать.

0 Ответов