Ссылка на репозиторий проекта Github
это сервер
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 на сервере, кажется, что он застревает на коммутаторе, если я удаляю do l oop это просто завершает программу.
Я также добавил клиентскую сторону и репозиторий github, если есть необходимость запустить программу.
Сервер сделан. net -Core и клиент в windows форме приложения на Visual Studio 2019