将多个客户端连接到GSM LAN调制解调器以发送SMS

时间:2017-03-08 15:40:44

标签: c# sockets network-programming client-server sms-gateway

我在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调制解调器,并避免此异常?

1 个答案:

答案 0 :(得分:0)

您不能。 Coniugo GSM调制解调器中的网络适配器(来自Lantronix)一次只能接受一个连接。

这是必需的:调制解调器本身无法处理多个连接。调制解调器实际上使用串行通信-只能处理一个连接。如果允许多个TCP连接,则两个用户可以同时发送数据。调制解调器无法处理这种情况。

您有两个选择:

  1. 您的程序仅在发送SMS时才连接到调制解调器。输入所有数据,点击发送,程序连接,发送SMS,然后断开连接。

  2. 您编写了连接到调制解调器的服务器程序。您想要发送SMS的客户将连接到该服务,并且该服务将处理SMS的排队和发送,并使个人客户了解该状态。

我会选择选项2。