我尝试通过@TCP将图像对象作为序列化文件从客户端发送到服务器 得到这个例外
服务器代码
namespace Receiver
{
[Serializable()]
public class ImageSerial : ISerializable
{
public Image img = null;
public ImageSerial(SerializationInfo info, StreamingContext ctxt)
{
img = (Image)info.GetValue("OMG", typeof(Image));
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("OMG", img);
}
}
public class ObjSerial
{
private Stream stream;
private BinaryFormatter bformatter;
private string FILENAME = "m.bin";
ImageSerial mp = new ImageSerial();
public Image getImgFromBin()
{
stream = File.Open(FILENAME, FileMode.Open);
bformatter = new BinaryFormatter();
mp = (ImageSerial)bformatter.Deserialize(stream);
stream.Close();
return mp.img;
}
客户端代码
namespace WindowsFormsApplication5
{
[Serializable()]
class ImageSerial :ISerializable
{
public Image img = null;
public ImageSerial() { }
public ImageSerial(SerializationInfo info, StreamingContext ctxt)
{
img = (Image)info.GetValue("OMG", typeof(Image));
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("OMG",img);
}
}
public class ObjSerial
{
private string FILENAME = "m.bin";
private TcpClient tcpClient;
private FileStream fstFile;
private NetworkStream strRemote;
private string SERVERIP = "10.102.239.207";
private int SERVERPort = 5051;
public void start(Image ims)
{
ImageSerial mp = new ImageSerial();
mp.img = ims;
Stream stream = File.Open(FILENAME, FileMode.Create);
BinaryFormatter bformatter = new BinaryFormatter();
bformatter.Serialize(stream, mp);
stream.Close();
//Clear mp for further usage.
sendFile();
}
private void ConnectToServer(string ServerIP, int ServerPort)
{
tcpClient = new TcpClient();
try
{
tcpClient.Connect(ServerIP, ServerPort);
}
catch (Exception exMessage)
{
// Display any possible error
}
}
private void sendFile()
{
ConnectToServer(SERVERIP, SERVERPort);
if (tcpClient.Connected == false)
{
ConnectToServer(SERVERIP, SERVERPort);
}
strRemote = tcpClient.GetStream();
fstFile = new FileStream(FILENAME, FileMode.Open, FileAccess.Read);
int bytesSize = 0;
byte[] downBuffer = new byte[2048];
while ((bytesSize = fstFile.Read(downBuffer, 0, downBuffer.Length)) > 0)
{
strRemote.Write(downBuffer, 0, bytesSize);
}
tcpClient.Close();
strRemote.Close();
fstFile.Close();
}
}
我已经阅读了很多关于这个例外的话题,所有这些话都谈到了两个解决方案
但仍无效
答案 0 :(得分:3)
当然服务器端将找不到客户端组件。它不应该。您的客户端代码不得位于服务器端。这里的问题是您定义了ImageSerial
类两次,一个在服务器中,另一个在客户端中。如果你控制双方,这是完全错误的。创建一个由客户端和服务器引用的公共程序集,并将公共类放在那里。
此外,删除从服务器到客户端的所有引用。如果您愿意,它应该是另一种方式,或者使用中间服务层,如WCF。