C#Socket接收数据并再次发送和接收

时间:2016-05-24 12:51:29

标签: c# sockets tcp

我有很多GPS设备。我的一个设备(作为客户端)每隔几分钟就在TCP" [3G * 4700201934 * 0009 * LK,0,1,61]"

上发送此消息

我的服务器必须从GPS设备读取消息并回复设备,我的意思是我的服务器必须发送此消息" [3G * 4700201934 * 0009 * LK]"获得GPS位置。如果我无法发送此消息,则GPS设备不会发送GPS的位置。

我的代码:

TcpListener listener = new TcpListener(IPAddress.Any, port);
listener.Start();

//Sonsuz döngü sayesinde AgAkimini sürekli okuyoruz
while (true)
{
    Socket client = listener.AcceptSocket();
    Console.WriteLine("Connection accepted.");

    var childSocketThread = new Thread(() =>
    {
        byte[] data = new byte[100];
        int size = client.Receive(data);
        string fromGPSMessage = string.Empty;
        for (int i = 0; i < size; i++)
            fromGPSMessage += Convert.ToChar(data[i]);
        Console.WriteLine("Recieved data: " + fromGPSMessage);
        //fromGPSMessage = [3G*4700201934*0009*LK,0,1,59]
        string serverMessageToGPS = fromGPSMessage.Substring(0, fromGPSMessage.IndexOf(",")) + "]";
        //serverMessageToGPS = [3G*4700201934*0009*LK]
        Encoding ascii = Encoding.ASCII;
        client.Send(ascii.GetBytes(serverMessageToGPS));

        data = new byte[100];
        size = client.Receive(data);
        string newMessagefromGPSMessage = string.Empty;
        for (int i = 0; i < size; i++)
            newMessagefromGPSMessage += Convert.ToChar(data[i]);
        Console.WriteLine("New Message Data: " + newMessagefromGPSMessage);

        client.Close();
    });
    childSocketThread.Start();
}

有时候没有新的消息数据:

enter image description here

我可以向设备发送消息,但我不知道如何从GPS设备获取第二条消息。

2 个答案:

答案 0 :(得分:0)

听起来您需要阅读TcpClientMSDN documentation

该页面上的示例显示了如何发送数据,以及如何读取返回给您的数据。

答案 1 :(得分:0)

您应该创建TCP OnReceive事件。因此,当新数据出现时,执行OnReceive事件并且您可以解析数据。

在您的代码中,您编写了client.Receive(数据),因此它将单次接收数据。要接收所有数据,您必须实现OnReceive事件,或者您可以使用线程将client.Receive(data)方法放入循环中。