C#tcpclient程序写入流但客户端未接收数据

标签 c# sockets tcpclient tcpserver

我编写了一个TCPClient 程序在我的PC 上运行。它首先启动一个 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 设备 = listener.AcceptSocket)。

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

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

2015-08-10 11:18 更新:
该程序的输出如下: enter image description here

2015-08-10 11:32 更新:
系统日志控制台的输出: enter image description here

2015-08-10 中午 12:07 更新:
Wireshark 的输出:
enter image description here

最佳答案

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

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

关于C#tcpclient程序写入流但客户端未接收数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31920495/

相关文章:

c# - HttpClient GetAsync 未按预期工作

C# - 如何使用数组数组作为 "parameterized"方法的输入?

python - 套接字连接有时会死锁

node.js - 使用 node.js、socket.io 和 redis 的一对一聊天应用程序

java - 在不知道长度的情况下从 TcpClient.GetStream() 读取

ubuntu - 为什么我的 .NET Core 服务器应用程序在 Ubuntu 中不接受连接,但在 Windows 中可以正常工作?

c# - 如何复制剪贴板中按钮的文本?

c# - .net maui 中的自定义控件和渲染器会发生什么?

MySQL 安装后无法在 OSX 上运行 -- 无法通过套接字 '/tmp/mysql.sock' 连接到本地 MySQL 服务器 (2)

java - 将 TCP 套接字连接到主机名时捕获超时异常