我正在使用C#和多线程处理客户端/服务器聊天应用程序。我的应用程序运行良好,直到我在客户端上放置了一个线程,该线程必须在后台运行以检查是否有人试图向我发送消息。我通过TcpClient接收消息的功能运行良好,但是当我将其放入线程中时,它似乎没有运行。当我的客户端从服务器收到正常消息时,会显示我发送的消息(必须连续接收的消息)。
我尝试了几种方法来启动函数(使用外部类,函数直接在客户端类中...)有时我不知道为什么它会给我这个错误:
System.Runtime.Runtime.Serialization.Serialization.SerializationException:
"The input stream is not a valid binary format.
我试图在函数中显示反序列化内容,但那时控制台崩溃。
我以这种方式(在客户端中)启动线程
public void start()
{
TcpClient comm = new TcpClient(hostname, port);
Console.WriteLine("Connection established");
Thread th = new Thread(new ClientReceiver(comm,this).receiveMessage);
th.Start();
while (true)
{
menu1(comm);
}
}
客户端的一小段代码(在没有线程的情况下效果很好)
public void createTopic(TcpClient comm)
{
Console.WriteLine("Vous allez créer un topic, entrez le nom du topic que vous voulez créer");
string expr = Console.ReadLine();
//envoie du nom du topic
Net.sendMsg(comm.GetStream(), new Result(expr, false));
//envoie de l'objet utilisateur
Net.sendObject(comm.GetStream(), new Result(u, false));
Console.WriteLine((Result)Net.rcvMsg(comm.GetStream()));
}
这是我启动的功能(在ClientReceiver类中)
public void receiveMessage()
{
if (client.isConnected())
{
while (true)
{
Result resRequest = (Result)Net.rcvMsg(comm.GetStream());
Console.WriteLine(resRequest);
}
}
}
这是我用来通过网络传递消息的班级
public static void sendMsg(Stream s, Message msg)
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(s, msg);
}
public static Message rcvMsg(Stream s)
{
BinaryFormatter bf = new BinaryFormatter();
return (Message)bf.Deserialize(s);
}
我发送邮件的功能
public void notifyUser(TcpClient clientToNotify, String textToSend)
{
Net.sendMsg(clientToNotify.GetStream(), new Result(textToSend));
}
我的消息接口和结果类非常基础,所以我认为它们不是必需的
我想了解为什么出现序列化错误以及为什么我的功能无法正常工作。 预先感谢您的帮助!