我在C#中编写了一个使用GSM LAN Modem(Coniugo)发送短信的程序。我使用socket作为客户端异步连接到GSM LAN调制解调器。调制解调器IP地址为192.186.2.1,端口为10001.我使用此代码启动与调制解调器的连接
AsynchronousClient smsClient; // the clinet manager
IPAddress ipAddress;
int port;
IPEndPoint remoteEP;
// Create a TCP/IP socket.
Socket client;
private void btnStartConnect_Click(object sender, EventArgs e)
{
try
{
ipAddress = IPAddress.Parse("192.186.2.1");
port = 10001;
remoteEP = new IPEndPoint(ipAddress, port);
// Create a TCP/IP socket.
client = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
// Connect to the remote endpoint.
client.BeginConnect(remoteEP,
new AsyncCallback(smsClient.ConnectCallback), client);
smsClient.connectDone.WaitOne();
if (client.Connected)
{
lblStatus.Text = "Client is Connected";
smsClient.Receive(client);
}
else
{
lblStatus.Text = "Client is Not Connected";
}
}
catch (Exception ex)
{
lblStatus.Text = ex.ToString();
}
}
当我运行代码并开始从网络中的主机连接到调制解调器时,连接工作没有问题,但是当我尝试在另一台主机上运行代码时,连接不起作用。我收到了异常消息
No connection could be made because the target machine actively refused it 192.186.2.1:10001.
如何使用套接字从多个主机连接到GSM调制解调器,并避免此异常?
答案 0 :(得分:0)
您不能。 Coniugo GSM调制解调器中的网络适配器(来自Lantronix)一次只能接受一个连接。
这是必需的:调制解调器本身无法处理多个连接。调制解调器实际上使用串行通信-只能处理一个连接。如果允许多个TCP连接,则两个用户可以同时发送数据。调制解调器无法处理这种情况。
您有两个选择:
您的程序仅在发送SMS时才连接到调制解调器。输入所有数据,点击发送,程序连接,发送SMS,然后断开连接。
您编写了连接到调制解调器的服务器程序。您想要发送SMS的客户将连接到该服务,并且该服务将处理SMS的排队和发送,并使个人客户了解该状态。
我会选择选项2。