Я пытаюсь создать приложение, которое будет вызывать удаленный модем и выполнять некоторую передачу данных (пользовательские данные в виде байтовых массивов).
Я использую оболочку Julapar ITapi3 и c # 4.0, работающие на 64-битной ОС Windows 7 (Компиляция под x86).
У меня есть приложение, которое звонит и отключается, как я ожидал, но у меня возникают проблемы с отправкой данных через линию. В настоящее время у меня есть следующий код в событии CallStateChanged, когда состояние вызова подключено
var handleArray = callForData.GetID("comm/datamodem");
var byteContents = BitConverter.ToInt64(handleArray, 0);
////temporary Handle array
IntPtr myPointer =new IntPtr(byteContents);
////var pinnedArray = GCHandle.Alloc(handleArray, GCHandleType.Pinned);
////var pointer = pinnedArray.AddrOfPinnedObject();
var commHandle = new SafeFileHandle(myPointer, true);
try
{
//now init filestream
_dataTransferOutFileStream = new FileStream(commHandle, FileAccess.ReadWrite, 2048, true);
//start by writing the login message to the modem
var buffer = CreatePasswordMessage();
IAsyncResult result= _dataTransferOutFileStream.BeginWrite(buffer, 0, buffer.Length,null,null);
while (!result.IsCompleted)
{
//wait for completion of sending login message.
Thread.Sleep(10);
}
//now we are done with sending login message
_dataTransferOutFileStream.EndWrite(result);
//wait 5 seconds
Thread.Sleep(5000);
//do the same type of thing for the read or whether it was sucessful.
var readBuffer = new byte[2048];
IAsyncResult readResult = _dataTransferOutFileStream.BeginRead(readBuffer, 0, 2048,null,null);
while (!readResult.IsCompleted)
{
Thread.Sleep(10);
}
//read is complete.
int readCount = _dataTransferOutFileStream.EndRead(readResult);
Debug.WriteLine("Read Complete Count of Bytes Read: {0} Content of First Byte: {1} ",new object[]{readCount,readBuffer[0]});
}
catch (Exception ex)
{
Debug.WriteLine(ex.ToString());
return false;
}
finally
{
commHandle.Close();
}
return true;
Это не похоже на фактическую отправку данных или получение каких-либо действительных данных с удаленного сайта. Есть ли что-то, что мне не хватает? Есть ли способ проверить, действительно ли используемый SafeFileHandle является ссылкой на порт модема?
Я попытался использовать встроенный класс SerialPort для .NET после того, как я подключился, но я получаю ошибку, что рассматриваемый порт используется другим процессом (я предполагаю, что TAPI имеет блокировку на нем.)
Я открыт для всех предложений.