Tag: tcpclient

如何向服务器发送“hello”并回复“hi”?

使用我的代码,我可以在服务器上读取消息并从客户端写入。 但我无法从服务器写入响应并在客户端中读取。 client上的代码 var cli = new TcpClient(); cli.Connect(“127.0.0.1”, 6800); string data = String.Empty; using (var ns = cli.GetStream()) { using (var sw = new StreamWriter(ns)) { sw.Write(“Hello”); sw.Flush(); //using (var sr = new StreamReader(ns)) //{ // data = sr.ReadToEnd(); //} } } cli.Close(); server上的代码 tcpListener = new TcpListener(IPAddress.Any, port); tcpListener.Start(); while (run) { var […]

通过TCP发送和接收XML数据

我一直在试图弄清楚如何通过TCP服务器发送和接收XML数据。 我来自java编程背景,所以我有点超出我的深度。 如果我只发送纯文本,我的程序可以工作,但是一旦我尝试发送xml数据,它就会挂起。 服务器永远不会收到消息。 我一直在寻找代码来做到这一点,并没有找到任何运气,我已经看到许多在线的代码示例不起作用。 如果你们中的任何一个人能解决这个问题,我将非常感激。 我在这里寻找代码示例,而不是解释我应该做些什么来解决它。 我只编写了C#几天。 以下是XML请求示例。 AGENT GET_SYSTEM_INFO UMOHB 这是我的TCP客户端代码 public static void sendStringRequest(String hostname, int port, String message) { String response = String.Empty; TcpClient client = getConnection(hostname, port); Console.WriteLine(message); NetworkStream stream = client.GetStream(); StreamWriter writer = new StreamWriter(stream, Encoding.UTF8); writer.AutoFlush = false; writer.Write(Encoding.UTF8.GetBytes(message).Length); writer.Write(message); writer.Flush(); StreamReader reader = new StreamReader(stream, Encoding.UTF8); […]

如果任务管理器中的Mem Usage不断增加,如何知道是否存在内存泄漏

我写了一个小的Server类,它基本上是一个TcpListener包装器和ThreadPool线程spawner。 线程运行Server :: ProcessMessage(),它执行一些工作来回发送消息,然后在它结束时退出。 但是在退出函数之前,我还调用TcpClient.GetStream()。Close()然后调用TcpClient.Close()。 我不使用任何Mutex或ManualResetEvent WaitHandles。 测试了客户端和服务器,一切正常,除了在任务管理器中,它显示每个Server :: ProcessMessage()上的Mem Usage不断增加。 即使所有客户端应用程序都已断开连接并关闭,Mem Mem仍然存在,而不是减少。 服务器作为Windows服务运行。 我怎么知道它是否是内存泄漏的迹象,或者只是垃圾收集器没有完成其工作(还)? 谢谢。 编辑:我想我找到了“内存泄漏”的原因。 我的Server :: ProcessMessage()中有Console.WriteLine()。 如果有一种更简单的方法来检查内存问题,它仍然会有所帮助。

如何查找原因和SocketException,并显示已建立的连接被主机中的软件中止的消息?

我知道类似的问题可能已被多次询问,但我想表达我所看到的行为,并发现是否有人可以帮助预测其原因。 我正在写一个通过TCP连接到其他Windows服务的Windows服务。 这有100个用户实体,每个有5个连接。 这些用户使用各自的连接执行任务。 该应用程序继续看这个问题1或2天。 或者有时在启动后立即显示问题(-rarely)。 我最好的跑步是4到5天没有显示这个例外。 在那个申请去世后,我不得不因各种原因停止申请。 我想知道是什么原因引起的? 这是堆栈跟踪。 System.IO.IOException: Unable to write data to the transport connection: An established connection was aborted by the software in your host machine. —> System.Net.Sockets.SocketException: An established connection was aborted by the software in your host machine at System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) at […]

NetworkStream和TcpClient有多少缓冲区?

我们正在编写TCPServer和Client程序。 TcpClient缓冲区有多少空间? 比如,它会在什么时候开始丢弃数据? 我们正在尝试确定TcpClient是否可以阻塞,或者它是否应该进入它自己的后台线程(以便缓冲区无法填满)。

TcpClient-如何连接到外部IP地址?

我一直在尝试设置一个基本场景,其中TcpClient连接到同一台机器上的TcpListener ,但到目前为止它只适用于127.0.0.1和192.168.XY 这是我的代码: var server = new TcpListener(IPAddress.Any, 51328); server.Start(); var client = new TcpClient(); client.ConnectAsync(IPAddress.Parse(“address from whatismyip”), 51328); server.AcceptTcpClient(); // hangs indefinitely here Console.ReadKey(); 我从whatismyip得到了我的外部地址,但我不确定我是否正确地做了。 我的程序有什么不对吗?

C#TCP客户端不能在行中获得多条消息

我已经构建了一个可以连接到我的服务器的应用程序。 一切都运行顺利,但是当服务器同时向客户端发送消息时我遇到了问题。 例如当服务器在行中发送2条消息时。 客户只收到第一个。 是否有可能在行中获得多条消息? 这是我的客户代码部分: TcpClient clientSocket; public string IPS= “###.###.###.###”; public int SocketS = ####; public void ConnectingToServer() { clientSocket= new TcpClient(); clientSocket.Connect(IPS, SocketS); if (clientSocket.Connected) { serverStream = clientSocket.GetStream(); byte[] outStream = System.Text.Encoding.ASCII.GetBytes(); serverStream.Write(outStream, 0, outStream.Length); serverStream.Flush(); } } // Function for send data to server. public void SendDataToServer(string StrSend) { if […]

tcpclient接收数据不正确

不确定这是TCPClient还是其他什么,我使用网络嗅探器检查从服务器发送和接收的内容,数据是否正确但是我的软件接收数据不正确。 让我解释一下,我发送一个查询字节(05)我得到一个确认回(06)然后我发送一些以9B字节开头的数据,一旦发送,我应该接收一个06字节然后在那个字节之后我应该得到一个C5字节,但根据我的软件,我得到另一个06字节,根据嗅探器不是这种情况! byte[] buff; if (!this.isConnected()) this.connect(); NetworkStream gs = _Socket.GetStream(); gs.Write(enq, 0, enq.Length); gs.Flush(); outputByte(enq, “Trans”); //outputs —> 05 buff = new byte[1]; gs.Read(buff, 0, buff.Length); gs.Flush(); outputByte(buff, “Rec”);// outputs with above byte information gs.Write(data, 0, data.Length); gs.Flush(); buff = new byte[1]; gs.Read(buff, 0, buff.Length); gs.Flush(); // this is the first receive of 06 […]

TCPClient有时会收到空字节数组

目前正在使用套接字开发一个简单的消息服务器,有时TCPClient接收正确的字节数,但每个字节为0。 这是发件人代码。 try { //c.clientSocket.NoDelay = true; // Send back an OK var clientStream = c.clientSocket.GetStream(); var Response = JsonConvert.SerializeObject(new Packet(“SERVER”, c.ClientName, new List() { new Payload(MessageLibrary.Commands.OK, null) })); var msg = System.Text.Encoding.ASCII.GetBytes(Response); clientStream.Write(msg, 0, msg.Length); } catch (Exception ex) { if (ExceptionRaised != null) ExceptionRaised(c.ClientName, ex); } Response = “{\”TimeStamp\”:\”2016-03-18T08:15:15.0881326+00:00\”,\”Sender\”:\”SERVER\”,\”Payload\”:[{\”Command\”:\”OK\”,\”CommandValue\”:\”\”}],\”Destination\”:\”GBCO0101\”}” 消息包含139个字节 所以这似乎没问题,这是接收代码。 static void […]

如何获取服务器(不是网络服务器)的IP地址,而是在Xamarin.Forms中的wifi模块上创建的TCP服务器

我需要获取运行TCP服务器的Wi-Fi模块的IP地址。 应用程序将打开WiFi连接设置页面,以允许用户连接到Wi-Fi模块创建的网络(需要输入密码) – 请参阅附图 。 服务器(Wi-FI模块)IP地址是172.1.4.155(例如)但是当我尝试使用GetLocalIPAddress() (下面附带)在Xamarin.Forms中获取IP地址时,它返回的地址是本地IP地址设备(电话) – 172.1.4.55(例如)。 我需要能够在没有应用程序中的用户输入的情况下以编程方式获取IP地址。 有没有办法获取(外部)非设备特定IP地址的IP地址? 我假设手机返回的IP地址是DHCP分配的IP地址。 我需要获取服务器IP地址,因为在手机和WiFi模块之间建立TCP套接字连接至关重要。 我一直在努力寻找一个没有任何成功的解决方案,所以任何帮助/建议或示例将不胜感激。 下面的代码是获取IP地址的GetLocalIPAddress()函数。 public static string GetLocalIPAddress() { var host = Dns.GetHostEntry(Dns.GetHostName()); foreach (var ip in host.AddressList) { if (ip.AddressFamily == AddressFamily.InterNetwork) { return ip.ToString(); } //return “”; } //throw new Exception(“Local IP Address Not Found!”); return “None”; }