ITAPI3 Отправка и получение данных - PullRequest
1 голос
/ 14 июня 2011

Я пытаюсь создать приложение, которое будет вызывать удаленный модем и выполнять некоторую передачу данных (пользовательские данные в виде байтовых массивов).

Я использую оболочку 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 имеет блокировку на нем.)

Я открыт для всех предложений.

1 Ответ

0 голосов
/ 17 июня 2011

Хорошо, я понял, в чем проблема.По-видимому, я неправильно форматировал данные, которые отправлял на удаленный модем, а не на удаленный сайт, сообщавший мне, что он просто полностью игнорировал мое сообщение.

Так что приведенный выше код будет работать для асинхронной отправки и получения данныхмодемная линия в C #.

...