Tag: tcpserver

如何向服务器发送“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 / IP断开连接

我使用了异步TCP / IP服务器,一切正常,但是当客户端由于错误或强制退出应用程序而断开连接时,由于IO.IOException类型的exception,它也会关闭我的服务器。 以下子发生exception: Private Sub ReadCallback(ByVal result As IAsyncResult) Try Dim client As Client = TryCast(result.AsyncState, Client) If client Is Nothing Then Return End If ‘MsgBox(client.ClientID) Dim networkStream As NetworkStream = client.NetworkStream Dim read As Integer = networkStream.EndRead(result) **’ ERRORS HERE!** If read = 0 Then Dim client As Client = TryCast(result.AsyncState, Client) SyncLock […]

TCP客户端问题

我在c#中的TCP客户端应用程序返回中遇到了一个大问题。 正常情况下它工作正常但在某些情况下服务器向特定客户端发送同时响应,因此这种情况下所有同时响应都在客户端作为单个消息接收。因此,客户端无法识别单个消息。 所以这种情况我的客户端应用程序无法处理特定的活动。 是否可以在客户端读取单个消息? 所以为了解决这个问题,我有一些选择,但我不知道它是否正确。 1-在客户端使用固定长度的缓冲区(但我的消息是可变长度)。 2-为每个响应消息添加分隔符。 如果有人知道解决此类问题的解决方案,请帮助我。

侦听TCP服务器应用程序的以太网电缆拔出事件

我有一个C#TCP服务器应用程序。 当TCP客户端与服务器断开连接时,我检测到TCP客户端断开连接但是如何检测电缆拔出事件? 当我拔下以太网电缆时,我无法检测到断开连接。

C#监听器线程的CPU使用率很高,睡眠未命中断开

我的连接处理程序如下(这比个人实验更多,而不是生产代码) 如果我没有在while循环中的任何地方添加一个Thread.Sleep,它会开始吸收CPU。相反,如果我做睡眠以缓解无休止的垃圾邮件,我会错过断开连接.. CPU的比例正常上升对于运行的客户端/线程的数量,所以不是监听器本身导致高使用率,它是下面发布的实际客户端线程..任何人对如何解决这个问题都有任何想法? (我正在避免基于等待的解决方案,因为我对async / await不够熟悉,并且线程方法对于这个相当小的项目工作正常) 我只是在SO周围寻找解决方案,并没有注意到任何这个特定的问题,或者提供了除了指导人们异步/等待文章之外的解决方案,所以很抱歉,如果我错过了适用的答案。 private void HandleConnection(CancellationToken ct) { int recv = 0; byte[] buf = new byte[4096]; Trace.WriteLine($”{_name} Connected”); if (_ns.CanWrite && _client.Connected) { _ns.Write(Encoding.BigEndianUnicode.GetBytes(“■WEL”), 0, Encoding.BigEndianUnicode.GetBytes(“■WEL”).Length); try { while (_client.Connected && !ct.IsCancellationRequested) { while (!_ns.DataAvailable) { //first attempted solution Thread.Sleep(100); // miss discon if i sleep here } if (ct.IsCancellationRequested) […]

具有多个客户端的TCP服务器

我正在研究TCP服务器/客户端应用程序。 我的问题是: 我的服务器应用程序启动一个新线程并阻止它,直到接受了listenforClient方法的连接 但是,如何在多个客户端连接到我的服务器时管理连接,并且他们同时请求不同的东西我如何管理客户端1获取其需要的信息以及客户端2的相同信息。 它是multithreading的,因此多个客户端可以连接,但我如何处理请求。 我不想把所有东西放在1方法中。 提前致谢 private void serverstart() { this.tcplistener = new TcpListener(IPAddress.Any, 49151); this.listenThread = new Thread(new ThreadStart(ListenForClients)); this.listenThread.Start(); } private void ListenForClients() { this.tcplistener.Start(); while (true) { //blocks until a client has connected to the server TcpClient client = this.tcplistener.AcceptTcpClient(); // here was first an message that send hello client // […]