通过TCP连接设备[调制解调器]的问题

时间:2009-08-27 14:11:08

标签: c# tcp sockets

我想通过TCP协议连接设备[一种调制解调器]。

该设备可被视为客户端。通过我想要的程序 连接到此设备。该程序位于服务器上 有一个特殊的端口打开和一个静态IP。

我该怎么办?

这是我的代码:

    // where ip= 10.0.0.50 and port= 5050, established for the server!
    TcpListerner listener;
    if listener!= null)
        {
            listener.Stop();
        }
        listener= new TcpListener(ip, port);
        listener.Start();


         Socket socket;
         if (!listener.Pending())
         {
             IAsyncResult ar = listener.BeginAcceptSocket(new AsyncCallback(DoAcceptSocketCallback), socket);
             Thread.Sleep(15000);  // try to connect in 15 seconds

             if (socket != null && socket.Connected)
             {
                // if socket is connected
                // put the code here or do nothing
             }
             else
             {
                    if (socket != null)
                    {
                        socket.Close();
                    }
                    if listener!= null)
                    {
                        listener.Stop();
                        listener = null;
                    }

              }
         }

    public void DoAcceptSocketCallback(IAsyncResult ar)
    {
        try
        {
            TcpListener listener = (TcpListener)ar.AsyncState;

            if (listener != null)
            {
                // connected to socket :
                socket = listener.EndAcceptSocket(ar);
            }
        }
        catch
        {
            socket = null;
        }
    }

虽然我无法连接设备但我无法通过套接字连接解决挂起问题。在此代码运行时,我无法对我的表单执行任何操作,因为尝试连接时间为15秒。

1 个答案:

答案 0 :(得分:1)

我认为您应该对代码进行一些更改。

当客户端连接时,使用此语句

创建TcpClient对象
TcpClient client = listener.AcceptTcpClient()

然后,您可以创建一个线程来处理客户端,以便主线程不会被卡住。

if (!listener.Pending())
{
    TcpClient client = listener.AcceptTcpClient();
    Thread newThread = new Thread(this.ServeClient);
    newThread.Start(client);
}

然后处理线程的方法

public static void ServerClient(TcpClient client)
{
    // Do some work
}

如果使用线程池而不是在每个连接上创建一个新线程,那会更好。使用此方法,您可以控制服务器可以处理的最大连接数。我不太了解这个功能,因为我没有在大型程序中使用它。

我建议你查看the Code Project example on Thread Pool

相关问题