📌  相关文章
📜  从客户端接受员工姓名并使用 XML 显示职位的 C# 程序(1)

📅  最后修改于: 2023-12-03 15:06:35.269000             🧑  作者: Mango

从客户端接受员工姓名并使用 XML 显示职位的 C# 程序

这是一个使用 C# 编写的程序,它从客户端接受员工姓名并使用 XML 显示职位。本程序实现了简单的客户端-服务器交互,并使用 XML 数据解析和呈现。

1. 程序简介

该程序由两部分组成:

  • 一个客户端应用程序,用于接受用户输入并将数据发送到服务器。
  • 一个服务器应用程序,接受客户端发送的数据,并根据该数据返回相应的职位信息。
2. 程序实现
2.1 客户端应用程序

客户端应用程序使用 Windows 窗体应用程序开发。在窗体中,添加了一个文本框用于接受用户输入的员工姓名和一个“查询”按钮,点击该按钮可将数据发送到服务器端。

客户端应用程序使用了 .NET 中的 Socket 类来与服务器通信。在发送数据之前,需要先将数据序列化成 XML 格式。序列化可以使用 .NET 中的 XmlSerializer 类来完成。

代码片段:

private void btnQuery_Click(object sender, EventArgs e)
{
    string name = txtName.Text;
    Employee employee = new Employee { Name = name };

    XmlSerializer serializer = new XmlSerializer(typeof(Employee));
    StringWriter writer = new StringWriter();
    serializer.Serialize(writer, employee);
    string xmlData = writer.ToString();

    byte[] data = Encoding.ASCII.GetBytes(xmlData);

    Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    client.Connect("localhost", 12345);
    client.Send(data);

    // 接收并处理服务器返回的数据
}
2.2 服务器应用程序

服务器应用程序也是一个 Windows 窗体应用程序。在窗体中使用了一个多行文本框用于显示客户端发送的数据和服务器返回的数据。

服务器应用程序启动后会监听本地的 12345 端口,并等待客户端发送数据。一旦接到数据,服务器就会将其反序列化成 Employee 对象,并根据员工姓名返回相应的职位信息。

代码片段:

public MainForm()
{
    InitializeComponent();

    Thread thread = new Thread(new ThreadStart(Listen));
    thread.Start();
}

private void Listen()
{
    Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    server.Bind(new IPEndPoint(IPAddress.Any, 12345));
    server.Listen(10);

    while (true)
    {
        Socket client = server.Accept();
        byte[] data = new byte[1024];
        int length = client.Receive(data);
        string xmlData = Encoding.ASCII.GetString(data, 0, length);

        XmlSerializer serializer = new XmlSerializer(typeof(Employee));
        StringReader reader = new StringReader(xmlData);
        Employee employee = (Employee)serializer.Deserialize(reader);

        // 根据员工姓名查找职位信息,返回给客户端
        string position = GetPosition(employee.Name);
        client.Send(Encoding.ASCII.GetBytes(position));

        txtLog.Invoke(new Action(() => { txtLog.Text += xmlData + "\r\n"; }));
    }
}

private string GetPosition(string name)
{
    // 根据姓名查找职位信息
    switch (name)
    {
        case "张三":
            return "经理";
        case "李四":
            return "销售人员";
        case "王五":
            return "工程师";
        default:
            return "未知";
    }
}
3. 总结

本程序演示了如何使用 C# 编写一个简单的客户端-服务器交互程序,并使用 XML 序列化和反序列化来处理数据。本程序中使用的 XmlSerializer 类可以方便地将对象序列化为 XML,也可以从 XML 反序列化为对象。在编写网络应用程序时,记得加上异常处理代码,以便及时发现并处理潜在的错误。