我现在想做一个TCP的通信的程序,当中通过建立socket连接来进行通信,通信的内容是我定义的一个对象,因为要将对象写道网络流当中,采用的是序列化的方式,但是有一个问题,在程序当中获得了网络流对象之后,如何将许多的对象一个个写道流中,在接收端又如何来实现一个个的全部反序列化呢,我好像每次只能序列化一个,多了就会出错,所以我采用的方法是每次通信都建立一个Socket连接,发送了一个对象之后就释放连接,使用起来也是可以的,只是感觉这个资源利用效率太低,有没有什么办法可以提高这个效率呢?
调试欢乐多
再补充楼主一下:如果这个对象只接收了一半,是不可能反序列化的,应该怎么判断?在Socket中有什么办法让双方通信一定要对称,不采用流的方式?
Remoting太难,MSDN上都没什么资料
如果发送不同对象则可以将每个对象的简短信息包括类型标识和所占字节数用固定长度存放在对象前,每个对象存一个,按顺序存,取的时候按顺序取就行了。总之,自己定义,符合自己的要求就好。
接收方收到之后,确定知道发送方将要发送的东西后再给发送方发一个响应,如"OK"。
发送方收到"OK"响应表示可发送真正的对象,便发送直接的对象或任何自定义消息。注:接收方一定要返回一个响应,发送方才可以继续发送,不然发送方发送的消息将是混乱的。而双方都通过"发送"->"接受"->"发送"……的模式进行,就不用像楼主说的断开连接了。
解决方法是这样:加上一个integer型的包大小数组一并发送,接收端收到后要接到4+包大小数组(包实际上就是对象序列化后的二进制大小),再进行反序列化,多于这个数少于这个数都会出现异常,不信你自己试试