我见过几个类似的问题,但到目前为止我一直找不到合适的答案。我正在编写我的课堂作业,用户将提交一个名称及其位置,以便将这些信息存储在字典中。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace locationserver
{
class Program
{
static void Main(string[] args)
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
RunServer(dictionary);
}
static void RunServer(Dictionary<string, string> dictionary)
{
Console.Clear();
Console.WriteLine("Dictionary list -----------------");
List<string> list = new List<string>(dictionary.Keys);
foreach (string k in list)
{
Console.WriteLine("{0}, {1}", k, dictionary[k]);
}
Console.WriteLine("---------------------------------");
try
{
Console.WriteLine("Server started listening...");
while (true)
{
DoRequest(socketStream, dictionary, listener);
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
Console.ReadLine();
RunServer(dictionary);
}
}
static void DoRequest(NetworkStream inputStream, Dictionary<string, string> dictionary, TcpListener listener)
{
string[] temp;
string streamInput;
streamInput = Console.ReadLine();
if (streamInput.Contains(" "))
{
temp = streamInput.Split(' ');
dictionary.Add(temp[0], temp[1]);
RunServer(dictionary);
}
else
{
try
{
Console.WriteLine(streamInput);
Console.WriteLine(dictionary[streamInput]);
Console.ReadLine();
RunServer(dictionary);
}
catch (Exception e)
{
Console.WriteLine(e);
Console.ReadLine();
RunServer(dictionary);
}
}
}
}
}
程序通过命令提示符运行。如果程序仅提供用户ID,这也是字典中的键值(前面示例中的1234),那么它应该写回位置(库)。
一旦收到数据以便进行错误检查,它会打印出字典,但是当我尝试访问字典中密钥的相应值时,它就不存在了。
try
{
Console.WriteLine(streamInput);
Console.WriteLine(dictionary[streamInput]);
Console.ReadLine();
RunServer(dictionary);
}
这是我尝试写入所提供密钥的值的代码块,但正如我所说,try总是失败并且我收到了错误消息。
答案 0 :(得分:1)
您的问题与客户端/服务器问题无关,为什么要显示客户端服务器代码?您遇到的问题是将内容存储在数据结构中。
您的问题属于范围之一。您需要一个全局数据结构,该结构具有服务器整个生命周期的范围。它不应该是通过参数传递的本地实体。你没有理解范围界定。
static Dictionary<string, string> theLocations;
是你需要的。
这是一名学生询问我已经设定的评估BTW
答案 1 :(得分:0)
而不是你foreach (string k in list)
中的StartServer
,你创建了一个非常不必要的列表,它是一个工具和IEnumerate,哪个是dictionary.Keys。
您应该能够foreach (var currentKey in dictionary.Keys) { [...] }
以下是一些可能对您有帮助的示例代码:
public static void Main()
{
Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("TheKeyString", "TheValueString");
dict.Add("Water", "H2O");
foreach (var entry in dict.Keys)
{
Console.WriteLine($"Key: {entry}");
}
Console.WriteLine($"Value: {dict["Water"]}");
}
-
output :>
Key: TheKeyString
Key: Water
Value: H2O