C#客户端/服务器:使用Streamreader/writer
我对C#比较陌生,但这里有: 我正在用C#开发一个远程文件服务客户机/服务器控制台应用程序,它应该使用同步套接字交换消息 主要问题之一(尽管看起来很简单)是使用streamreader/streamwriter从服务器向客户端返回字符串 应用程序用户可以使用命令行界面,其中包含执行操作的选项(来自switch语句)。也就是说,键入1和enter将执行代码,将字符串从服务器发送到客户端 以下是来自客户端的示例代码:C#客户端/服务器:使用Streamreader/writer,c#,sockets,tcp,streamreader,streamwriter,C#,Sockets,Tcp,Streamreader,Streamwriter,我对C#比较陌生,但这里有: 我正在用C#开发一个远程文件服务客户机/服务器控制台应用程序,它应该使用同步套接字交换消息 主要问题之一(尽管看起来很简单)是使用streamreader/streamwriter从服务器向客户端返回字符串 应用程序用户可以使用命令行界面,其中包含执行操作的选项(来自switch语句)。也就是说,键入1和enter将执行代码,将字符串从服务器发送到客户端 以下是来自客户端的示例代码: try { using (
try
{
using (TcpClient client = (TcpClient)clientObject)
using (NetworkStream stream = client.GetStream())
using (StreamReader rd = new StreamReader(stream))
using (StreamWriter wr = new StreamWriter(stream))
{
string menuOption = rd.ReadLine();
switch (menuOption)
{
case "1":
case "one":
string passToClient = "Test Message!";
wr.WriteLine(passToClient);
break;
}
while (menuOption != "4");
}
}
我知道我发布的代码只是程序的一个片段,但它会占用相当多的空间,我希望你能从中收集我的意思,如果不是,我会发布更多
这只是给我一个大概的想法
我感谢你能提供的任何帮助/建议。我要找的不是太多的代码示例(虽然有点帮助),而是更多关于streamreader/writer的解释,因为我似乎不太了解在线内容
谢谢。我想你只是少了一个
wr.flush()代码>但本文应涵盖您需要的所有内容:
我刚刚使用您的代码运行了一个测试,它运行良好,我可以直接进入“一”案例语句
我猜您可能没有在发送的字符串中包含换行符,或者您只是配置了错误的TcpClient或TcpListener
以下是我的测试的客户端代码:
TcpClient client = new TcpClient("127.0.0.1", 13579);
string message = "one" + Environment.NewLine;
Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
NetworkStream stream = client.GetStream();
stream.Write(data, 0, data.Length);
以下是服务器端:
IPAddress localAddr = IPAddress.Parse("127.0.0.1");
TcpListener server = new TcpListener(localAddr, 13579);
server.Start();
TcpClient client = server.AcceptTcpClient();
using (client)
using (NetworkStream stream = client.GetStream())
using (StreamReader rd = new StreamReader(stream))
using (StreamWriter wr = new StreamWriter(stream))
{
string menuOption = rd.ReadLine();
switch (menuOption)
{
case "1":
case "one":
string passToClient = "Test Message!";
wr.WriteLine(passToClient);
break;
}
while (menuOption != "4") ;
}
只需首先运行服务器端代码,它将在等待连接时阻塞,然后在等待数据时阻塞。然后运行客户端代码。您应该能够在switch()上捕获断点。每当您使用StreamWriter
时,都需要记录流的内容。我将引用MSDN,原因很清楚:
清除当前写入程序的所有缓冲区,并将所有缓冲数据写入基础流
你可以简单地称之为:
wr.flush();
解决方案可以更简单:
StreamWriter wr = new StreamWriter(stream) { AutoFlush = true }
啊,我错过了Flush()
。