Csharp/C#教程:如何向服务器发送“hello”并回复“hi”?分享


如何向服务器发送“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 client = tcpListener.AcceptTcpClient(); string data = String.Empty; using (var ns = client.GetStream()) { using (var sr = new StreamReader(ns)) { data = sr.ReadToEnd(); //using (var sw = new StreamWriter(ns)) //{ // sw.WriteLine("Hi"); // sw.Flush(); //} } } client.Close(); } 

如何在读取数据后让服务器回复并让客户端读取此数据?

因为你正在使用

 TcpClient client = tcpListener.AcceptTcpClient(); 

,您可以直接回写客户端而无需自我识别。 如果您使用Stream.Read().ReadLine()而不是.ReadToEnd()那么您拥有的代码将实际工作ReadToEnd()将永久阻塞网络流,直到流关闭。 查看类似问题的答案 ,或者从MSDN ,

ReadToEnd假定流知道它何时到达终点。 对于服务器仅在您请求数据并且不关闭连接时才发送数据的交互式协议,ReadToEnd可能会无限期地阻塞,因为它没有达到目的,应该避免。

如果在一侧使用ReadLine(),则需要在另一侧使用WriteLine()而不是Write()。 另一种方法是使用一个调用Stream.Read()的循环,直到没有东西可以读取。 您可以在MSDN上的AcceptTcpClient()文档中看到服务器端的完整示例。 相应的客户端示例位于TcpClient文档中 。

Cheesy,inneficient,但在一次性一次性计划中诀窍:

但是, 这是一个很好的起点 ,请查看Sockets类以进行适当的双向通信。

上述就是C#学习教程:如何向服务器发送“hello”并回复“hi”?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/936269.html

(0)
上一篇 2021年11月6日
下一篇 2021年11月6日

精彩推荐