嗨 有没有办法通过拨号调制解调器连接到没有互联网的电脑?像 windows 超级终端一样。在计算机之间建立连接发送文件。只需在两台计算机之间直接连接并发送文件。
5 回答
是的。
假设调制解调器通过串行端口连接(或模拟通过串行端口连接):您需要设置一个调制解调器(学习您的AT
命令!)来监听和接听来电,另一个拨第一个。
然后,您可以将该对视为相当长的串行链路。
然而,让一切可靠地工作更像是一门艺术,而不是一门科学,而且今天很少有人做到这一点,以至于大部分都被遗忘了。我上一次以这种方式使用调制解调器是在十五年前。
我们过去使用的方法是使用零调制解调器电缆。在过去,我们甚至曾经以这种方式进行“联网”游戏。
这基本上是一根 RS-232 电缆,其中接收和发送引脚交叉接线。我仍然在周围看到一些适配器,因此掌握一个应该不会太难。
很久以后,一些人创建了SLIP(串行线路 IP),以使串行线路能够充当整个 TCP/IP 堆栈的载体。稍后引入PPP作为改进。我认为 SLIP 仍然适用于大多数平台,并且 PPP 存在于每个可以进行拨号上网的平台上。
因此,如果问题基本上归结为想要通过 PPP 将两台计算机联网而不通过其他人的拨号服务器(如 Earthlink),那么您需要在两台计算机中的一台上安装 PPP 服务器。它们随大多数 Linux 发行版一起提供。对于Windows,您将不得不去看看。我会帮忙,但我的公司阻止者又过分了。
有人在这里用 C# 编写了 XModem 实现:http: //trackday.cc/b2evo/blog2.php/2007/08/02/net-xmodem它可能对您所追求的有所帮助。
您可以在需要使用调制解调器的 Windows 中轻松设置拨号网络连接(在设置 VPN 的选项下,但您可以将其设置为仅拨号)。
因此,我假设您可以将网络位置映射到它以供您的 C# 代码使用。
如前所述,至少有一个调制解调器必须打开并监听连接。
* 编辑 *
我相信下面的代码会触发一个已经放置在网络连接中的拨号连接
System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo(@"c:\Local Area Connection 2 - Shortcut");
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
proc.Start();
对于放置在 c:\ 驱动器并命名为“本地连接 2 - 快捷方式”的链接
然后,您可以 ping 目标以查看其是否已连接。
最终,尽管我认为您最好的解决方案可能是使用 RAS。
看看这里的 Codeplex:DotRAS
然后,您可以使用以下代码:
RasDialer dialer = new RasDialer();
bool connected = false;
foreach (RasConnection connection in dialer.GetActiveConnections())
{
if (connection.EntryName == "MyFriendsPC")
{
connected = true;
break;
}
}
if (!connected) {
dialer.EntryName = "MyFriendsPC";
dialer.Dial();
// If you need to provide credentials, use the Dial(NetworkCredential) overload that's available.
}
此示例假定您在默认电话簿中已经有一个名为 MyFriendsPC 的条目。如果您不需要并且需要以编程方式创建此连接,您可以为此使用 RasPhoneBook 组件。
RasPhoneBook pbk = new RasPhoneBook();
pbk.Open(); // This will open the phone book in the All Users profile.
RasEntry entry = new RasEntry("MyFriendsPC");
如果您希望使用连接的默认设置,您可以使用 RasEntry 类上的静态方法之一,或在此处手动配置连接。
pbk.Entries.Add(entry);
一旦条目被添加到集合中,它将立即添加到电话簿中。
从您的问题中不清楚的一件事是,您是尝试使用电缆直接连接同一物理位置的两台机器,还是尝试通过 PSTN 从另一台机器拨入。
如果它们在同一个地方,请从等式中消除调制解调器。这显着降低了复杂性。
如果他们在不同的位置(即通过诚实的拨号连接拨号),这里有一些代码可能会对您有所帮助。本文讨论的是蓝牙或 GPRS 调制解调器,但其核心是关于发送可用于与任何 AT 命令集兼容的设备通信的 AT 命令。它可能会让你朝着正确的方向前进。
更新
请参阅http://msdn2.microsoft.com/en-us/system.io.ports.serialport(VS.80).aspx
由于调制解调器应该连接到 COM 端口 (COM1-COM12),即使它是内部调制解调器,您也应该能够使用 .NET 框架的 SerialPort 类来打开端口、发送AT命令等。一旦打开连接,您可以使用 XModem 库来传输文件,或直接串行进行常规通信。
您需要 IP 堆栈,还是对直接串行协议感到满意?