c# - 开关盒没有变化
问题描述
这是服务器
static void Main(string[] args)
{
string path = Directory.GetCurrentDirectory();
List<string> filesList = new List<string>();
IPAddress hostname = IPAddress.Parse("192.168.0.253");
Int32 port = 9999;
TcpListener server = null;
TcpClient client = null;
string data = null;
BinaryFormatter bf = new BinaryFormatter();
server = new TcpListener(hostname, port);
server.Start();
Console.WriteLine("server has started ");
client = server.AcceptTcpClient();
Console.WriteLine("server accepts clients now");
NetworkStream dataStream = client.GetStream();
Console.WriteLine("server started data stream");
byte[] bytes = new byte[client.ReceiveBufferSize];
dataStream.Read(bytes, 0, bytes.Length);
data = System.Text.Encoding.ASCII.GetString(bytes);
string cleanData = data.Replace("\0", "");
Console.WriteLine(cleanData);
do
{
try
{
这是问题所在
switch (cleanData)
{
case "1":
List<string> dir = new List<string>();
string message = $"Current path is: {path}";
dir.Add(message);
bf.Serialize(dataStream, dir);
dataStream.Flush();
break;
case "2":
string[] files = Directory.GetFiles(path);
foreach (var file in files)
{
filesList.Add(file);
}
bf.Serialize(dataStream, filesList);
filesList.Clear();
filesList.ForEach(Console.WriteLine);
dataStream.Flush();
break;
default:
Console.WriteLine("waiting for input");
dataStream.Flush();
break;
}
}
catch (Exception e)
{
throw e;
}
} while (true);
}
这是客户
public partial class Form1 : Form
{
string hostname = "192.168.0.253";
int port = 9999;
TcpClient client = new TcpClient();
NetworkStream serverStream = default(NetworkStream);
public Form1()
{
InitializeComponent();
client.Connect(hostname, port);
checkedListBox1.Items.Add("Connected to the main server");
}
private void GetList()
{
BinaryFormatter formatter = new BinaryFormatter();
serverStream = client.GetStream();
int buff = 0;
byte[] instream = new byte[client.ReceiveBufferSize];
buff = client.ReceiveBufferSize;
List<string> data = (List<string>)formatter.Deserialize(serverStream);
//string data = System.Text.Encoding.ASCII.GetString(instream);
foreach (var item in data)
{
checkedListBox1.Items.Add(item);
}
serverStream.Flush();
return;
}
private void getData()
{
BinaryFormatter formatter = new BinaryFormatter();
serverStream = client.GetStream();
int buff = 0;
byte[] instream = new byte[client.ReceiveBufferSize];
buff = client.ReceiveBufferSize;
List<string> data = (List<string>)formatter.Deserialize(serverStream);
foreach (var item in data)
{
checkedListBox1.Items.Add(item);
}
serverStream.Flush();
return;
}
private void ShowItems_Click(object sender, EventArgs e)
{
string message = "2";
byte[] dataToSend = Encoding.ASCII.GetBytes(message);
NetworkStream dataStream = client.GetStream();
dataStream.Write(dataToSend, 0, dataToSend.Length);
dataStream.Flush();
GetList();
return;
}
private void ReloadItems_Click(object sender, EventArgs e)
{
checkedListBox1.Items.Clear();
string message = "2";
byte[] dataToSend = Encoding.ASCII.GetBytes(message);
NetworkStream dataStream = client.GetStream();
dataStream.Write(dataToSend, 0, dataToSend.Length);
dataStream.Flush();
GetList();
return;
}
private void DownloadItems_Click(object sender, EventArgs e)
{
List<string> itemsToDownload = new List<string>();
foreach (var item in checkedListBox1.CheckedItems)
{
itemsToDownload.Add(item as string);
}
return;
}
private void ShowDir_Click(object sender, EventArgs e)
{
string message = "1";
byte[] dataToSend = Encoding.ASCII.GetBytes(message);
NetworkStream dataStream = client.GetStream();
dataStream.Write(dataToSend, 0, dataToSend.Length);
dataStream.Flush();
getData();
return;
}
}
}
所以我试图让这个带有客户端的数据存储服务器能够下载并将我的所有数据存储在一个设备中,就像我自己的云一样,但我遇到了一个我无法解决的问题,那就是服务器中的 switch 语句,它似乎卡在 switch 上,如果我删除 do 循环,它只会结束程序。
如果需要运行程序,我还添加了客户端和 github 存储库。
服务器在 .net-core 中制作,客户端在 windows 窗体应用程序中均在 Visual Studio 2019 上制作
解决方案
我需要在 do 循环中添加变量 cleadata 以在每次开关中断后刷新开关的值
do
{
data = System.Text.Encoding.ASCII.GetString(bytes);
string cleanData = data.Replace("\0", "");
Console.WriteLine(cleanData);
try
{
switch (cleanData)
{
case "1":
List<string> dir = new List<string>();
string message = $"Current path is: {path}";
dir.Add(message);
bf.Serialize(dataStream, dir);
dataStream.Flush();
break;
case "2":
string[] files = Directory.GetFiles(path);
foreach (var file in files)
{
filesList.Add(file);
}
bf.Serialize(dataStream, filesList);
filesList.Clear();
filesList.ForEach(Console.WriteLine);
dataStream.Flush();
break;
default:
Console.WriteLine("waiting for input");
dataStream.Flush();
break;
}
}
推荐阅读
- javascript - findOneAndUpdate 不是 mongoose 的函数
- javascript - 将javascript文件拆分为多个文件
- node.js - 使用云功能创建后更新 firestore 文档字段
- java - 如果我们总是把 Exception 对象放在 catch 块中,那么 finally 块就不需要了吗?
- ember.js - 升级到 Ember 3.20.2 后获取模型未定义错误
- publish-subscribe - 什么是 DCPS,它与 DDS 有什么关系?
- javascript - Socket JS 在 onload 方法中不起作用
- dolphindb - 与范围域和列表域相比,哈希域的主要应用是什么?
- spring-boot - 放心使用 Spring Boot 和 Kotlin 进行 E2E Api 测试
- python - 托盘图标在窗口启动文件夹(.pyw 扩展名)上不起作用