ITAPI3发送和接收数据
本文关键字:数据 ITAPI3 | 更新日期: 2023-09-27 17:59:02
我正在尝试创建一个应用程序,该应用程序将调用远程调制解调器并进行一些数据传输(字节数组形式的自定义数据)。
我使用的是JulMar的ITapi3包装器和在Windows7 64位操作系统上运行的c#4.0(编译为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锁定了它。)
我对所有的建议都持开放态度。
好的,我发现了问题所在。显然,我对发送到远程调制解调器的数据进行了错误的格式化,而不是远程站点告诉我它只是完全忽略了我的消息。
因此,上面的代码将用于通过C#中的调制解调器线路异步发送和接收数据。