如何发送"你好"服务器和回复A"喜"? [英] How to send a "hello" to server and reply a "hi"?

查看:350
本文介绍了如何发送"你好"服务器和回复A"喜"?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用我的代码,我可以在服务器上读取信息,并从客户端写。但我不能够写入从服务器的响应,并在客户端读取。

With my code I can read a message on the server and write from the client. But I am not being able to write a response from the server and read in the 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();



上的代码服务器

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();
}



我怎样才能让服务器响应读取数据后,使客户端读取这些数据?

How can I make the server reply after reading the data and make the client read this data?

推荐答案

由于您使用的

TcpClient client = tcpListener.AcceptTcpClient();



,你可以写回客户端直接内无需自我认同。 你的代码将实际工作如果您使用 Stream.Read() .ReadLine()而不是 .ReadToEnd() ReadToEnd的()将阻止永远都在网络流,直到流被关闭。请参见这个答案以类似的问题,或者从 MSDN

, you can write back to the client directly without needing it to self-identify. The code you have will actually work if you use Stream.Read() or .ReadLine() instead of .ReadToEnd(). ReadToEnd() will block forever on a network stream, until the stream is closed. See this answer to a similar question, or from MSDN,

ReadToEnd的假设,当它已经到头了流
知道。对于其中的
服务器发送的数据,只有当你问
它并不会关闭
连接
交互协议,ReadToEnd的可能会阻止
无限期因为它不达到
结束,应尽量避免。

ReadToEnd assumes that the stream knows when it has reached an end. For interactive protocols in which the server sends data only when you ask for it and does not close the connection, ReadToEnd might block indefinitely because it does not reach an end, and should be avoided.

如果您在一侧使用的ReadLine(),您将需要使用的WriteLine() - 未写() - 在另一侧。另一种方法是使用一个循环调用Stream.Read(),直到有一无所有阅读。你可以看到这是一个完整的例子在的在MSDN上 AcceptTcpClient()文档。相应的客户端的例子是在 TcpClient的文档

If you use ReadLine() at one side, you will need to use WriteLine() - not Write() - at the other side. The alternative is to use a loop that calls Stream.Read() until there is nothing left to read. You can see a full example of this for the server side in the AcceptTcpClient() documentation on MSDN. The corresponding client example is in the TcpClient documentation.

这篇关于如何发送"你好"服务器和回复A"喜"?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆