c#tcpclient程序写入流但客户端没有接收数据

时间:2015-08-10 13:10:19

标签: c# sockets tcpclient tcpserver

我已经写了一个 TCPClient 程序在我的电脑上运行。它首先启动TCP侦听器以侦听特定端口,然后从多个线程上的多个TCP客户端读取/写入 我能够从客户端读取,但每当我尝试向其发送数据时,程序显示它已发送数据,但客户端没有收到任何内容。

以下是代码:

            TcpClient client = listener.AcceptTcpClient();
            var childSocketThread = new Thread(() =>
            {
                if (client.Connected)
                {
                    using (NetworkStream stream = client.GetStream())
                 {
                    Console.WriteLine("connected");
                    byte[] data = new byte[1000];
                    try
                    {
                        if (stream.CanRead)
                        {
                            stream.Read(data, 0, 1000);
                            string dataStr = Encoding.ASCII.GetString(data);
                            string dataa = dataStr.TrimEnd('\0');
                            //Console.WriteLine(dataa);
                            if (dataa.Length > 10)
                            {
                                deviceid = ParseRequest(dataa);

                                byte[] sendnow = Encoding.ASCII.GetBytes(reply[deviceid]);

                                Array.Clear(data, 0, 1000);
                                Console.WriteLine("Recieved data: " + dataa);
                                Console.WriteLine("Sending data");
                                using (StreamWriter writer = new StreamWriter(stream))
                                {
                                    writer.AutoFlush = true;
                                    writer.WriteLine(reply[deviceid]);
                                }
                                Console.WriteLine(reply[deviceid]);
                                Console.WriteLine("Sent");
                            }

                            Console.WriteLine();
                        }
                    }
                    catch (Exception es)
                    {
                        Console.WriteLine(es);
                    }
                 }
                }

            });
            childSocketThread.Start();    

我使用的服务器设备是PLC。另外,我已经尝试过的事情:
1)使用Socket.Send方法直接发送 2)使用NetworkStream方法直接发送 3)接受TCP连接作为套接字。 (Socket device = listener.AcceptSocket)。

这些方法似乎都没有发送到设备,即使程序告诉我发送数据没有问题,因为它显示"已发送"在尝试发送数据后。 我从此链接http://www.codeproject.com/Articles/488668/Csharp-TCP-Server下载了另一个程序。他们提供的测试应用程序能够在与在同一台PC上运行的程序相同的端口上发送和接收数据。

我无法就如何诊断获得任何指导,更重要的是解决了这个问题。有什么想法吗?

更新2015-08-10 11:18 a.m。:
该计划的产出如下: enter image description here

更新2015-08-10 11:32 a.m。:
Syslog控制台的输出: enter image description here

更新2015-08-10 12:07 p.m。:
Wireshark的输出:
enter image description here

1 个答案:

答案 0 :(得分:-1)

我们需要您发布双方代码。不过,这里有一些工作正常的代码,您可以使用它来查看您是否做错了。

http://www.codeproject.com/Articles/1415/Introduction-to-TCP-client-server-in-C