我对C#比较新,但是这里有:
我正在用C#开发远程文件服务客户端/服务器控制台应用程序,它应该使用同步套接字交换消息。
其中一个主要问题(甚至认为看起来很简单)是使用streamreader / streamwriter从服务器返回一个字符串。
应用程序用户使用带有选项(来自switch语句)的命令行界面来执行操作。即输入1并输入将执行代码以将字符串从服务器发送到客户端。
以下是客户端的示例代码:
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的解释,因为我似乎无法理解在线的内容。
感谢。
答案 0 :(得分:3)
我认为您错过了wr.flush();
,但本文应涵盖您需要的所有内容:
http://thuruinhttp.wordpress.com/2012/01/07/simple-clientserver-in-c/
答案 1 :(得分:2)
每当您使用StreamWriter
时,您需要Flush()流的内容。我引用MSDN的原因很清楚:
清除当前编写器的所有缓冲区,并将所有缓冲的数据写入基础流。
你可以简单地称之为:
wr.flush();
答案 2 :(得分:1)
解决方案可以更简单:
StreamWriter wr = new StreamWriter(stream) { AutoFlush = true }
答案 3 :(得分:0)
我刚刚使用您的代码运行测试,它运行正常,我可以直接进入“一个”案例陈述。
我猜你要么不在你发送的字符串中包含换行符,要么你只是将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()上捕获断点。