c# - 如何使用套接字发送或返回 List<T>

标签 c# winforms sockets c#-4.0

还有一个服务器和客户端套接字。我想学习如何发送 List<T> , IEnumerable<T>对象到客户端到服务器或服务器到客户端。 我想将服务器端 TaskManager 线程列表发送到客户端。此代码逐行发送,我想发送完整列表。我该怎么做?

private static IEnumerable<string> TaskManager()
{
    List<string> lst = new List<string>();

    foreach (System.Diagnostics.Process p in
    Process.GetProcesses().OrderBy(o => o.ProcessName))
    {
        lst.Add(p.ProcessName + "_" + p.Id);
    }
    return lst.AsParallel();
}

....
....
....

while (true)
{
    Socket socket = Listener.AcceptSocket();
    try
    {
        //open stream
        Stream stream = new NetworkStream(socket);
        StreamReader sr = new StreamReader(stream);
        StreamWriter sw = new StreamWriter(stream);
        sw.AutoFlush = true;
        while (true)
        {
            Parallel.ForEach(
                TaskManager(), item=>
                    sw.WriteLine(item)
                );
        }

        stream.Close();
        stream.Dispose();

    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }

    Console.WriteLine("Disconnected: {0}", socket.RemoteEndPoint);
    socket.Close();
    socket.Dispose();
}

最佳答案

您可以使用 BinaryFormatter 来序列化和反序列化一个 List。

using System.Runtime.Serialization.Formatters.Binary;

// Server side
Stream stream = new NetworkStream(socket);
var bin = new BinaryFormatter();
bin.Serialize(stream, TaskManager());

// Client side
Stream stream = new NetworkStream(socket);
var bin = new BinaryFormatter();
var list = (List<string>)bin.Deserialize(stream);

关于c# - 如何使用套接字发送或返回 List<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15588279/

相关文章:

Java多线程有状态服务器——网络设计

连接到 C# 服务器 SSL 的 Java 客户端

c# - 在哪里通过代码设置验证错误?

c# - 在 ViewModel 中更新 View

C# : Get type parameter at runtime to pass into a Generic method

c# - 如何使用 ASP .NET 创建对话框消息框?

.net - 数据绑定(bind) 101. 如何在 .Net 中进行

c# - 在 winforms ComboBox 中为单个项目上色?

c# - 异步客户端套接字C#。如何在不阻止程序运行的情况下循环等待来自服务器的信息?

python - 在 Python 中使用一个套接字接收和发送消息