2012-08-13 85 views
1

我在哪裏工作,我們目前使用的時鐘輸入系統使用連接到我們網絡的手持掃描器。我想知道是否有通過C#的方式連接到此設備並從此設備接收任何輸入。或者,就此而言,以類似的方式連接任何其他輸入設備。如果有的話,如果有人能給我一些指點,讓我開始,或建議去哪裏看。從TCP/IP設備接收數據

+0

綜觀API文檔中的設備會成爲最好的地方...我們不能告訴你。在最基本的層面上,'Socket','NetworkStream'和'TcpClient'可能很有用 - 但很難說不知道API。 – 2012-08-13 08:35:51

+0

是否可以連接到設備取決於設備本身。它是否帶有任何文檔? – CodeCaster 2012-08-13 08:36:27

+0

同意,你可能需要一個協議文件或equivilent,除非你想花很長時間猜測。 – KingCronus 2012-08-13 08:36:41

回答

1

如果任何人都可以給我一些指示,讓我開始,或去哪裏看。

我會建議你看看「System.Net」命名空間。使用StreamReader,StreamWriter或我推薦的NetworkStream,您可以輕鬆地在多個設備之間寫入和讀取流。

查看以下示例以瞭解如何託管數據並連接到主機以接收數據。

託管數據(服務器):

static string ReadData(NetworkStream network) 
{ 
    string Output = string.Empty; 
    byte[] bReads = new byte[1024]; 
    int ReadAmount = 0; 

    while (network.DataAvailable) 
    { 
     ReadAmount = network.Read(bReads, 0, bReads.Length); 
     Output += string.Format("{0}", Encoding.UTF8.GetString(
      bReads, 0, ReadAmount)); 
    } 
    return Output; 
} 

static void WriteData(NetworkStream stream, string cmd) 
{ 
    stream.Write(Encoding.UTF8.GetBytes(cmd), 0, 
    Encoding.UTF8.GetBytes(cmd).Length); 
} 

static void Main(string[] args) 
{ 
    List<TcpClient> clients = new List<TcpClient>(); 
    TcpListener listener = new TcpListener(new IPEndPoint(IPAddress.Any, 1337)); 
    //listener.ExclusiveAddressUse = true; // One client only? 
    listener.Start(); 
    Console.WriteLine("Server booted"); 

    Func<TcpClient, bool> SendMessage = (TcpClient client) => { 
     WriteData(client.GetStream(), "Responeded to client"); 
     return true; 
    }; 

    while (true) 
    { 
     if (listener.Pending()) { 
      clients.Add(listener.AcceptTcpClient()); 
     } 

     foreach (TcpClient client in clients) { 
      if (ReadData(client.GetStream()) != string.Empty) { 
       Console.WriteLine("Request from client"); 
       SendMessage(client); 
      } 
     } 
    } 
} 

現在客戶將然後使用下面的方法來發送請求:

static string ReadData(NetworkStream network) 
{ 
    string Output = string.Empty; 
    byte[] bReads = new byte[1024]; 
    int ReadAmount = 0; 

    while (network.DataAvailable) 
    { 
     ReadAmount = network.Read(bReads, 0, bReads.Length); 

     Output += string.Format("{0}", Encoding.UTF8.GetString(
       bReads, 0, ReadAmount)); 
    } 
    return Output; 
} 

static void WriteData(NetworkStream stream, string cmd) 
{ 
    stream.Write(Encoding.UTF8.GetBytes(cmd), 0, 
       Encoding.UTF8.GetBytes(cmd).Length); 
} 

static void Main(string[] args) 
{ 
    TcpClient client = new TcpClient(); 
    client.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1337)); 
    while (!client.Connected) { } // Wait for connection 

    WriteData(client.GetStream(), "Send to server"); 
    while (true) { 
     NetworkStream strm = client.GetStream(); 
     if (ReadData(strm) != string.Empty) { 
      Console.WriteLine("Recieved data from server."); 
     } 
    } 
} 
相關問題