JAVA TCP通信,客户端给服务器传送JAVA对象通信出错了,求各位大神指教

JAVA TCP通信,客户端给服务器传送JAVA对象通信出错了,求各位大神指教,第1张

在java中用socket传输对象的时候,底层是把java对象序列化,然后以二进制数据进行传输的。socket的服务端和客户端都需要有这个对象的声明,比如客户端发送的是comclientMsgPackage对象,那么这个对象的class文件必须在服务端的classpath中。否则就会是接收方接收了tcp的数据包,但是无法还原成对象。
底层要能把对象序列化,这个对象要实现一个可序列化的接口:javaioSerializable。
类通过实现 javaioSerializable
接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法字段,仅用于标识可序列化的语义。
writeObject 方法负责写入特定类的对象的状态,以便相应的 readObject 方法可以恢复它。通过调用
outdefaultWriteObject 可以调用保存 Object 的字段的默认机制。该方法本身不需要涉及属于其超类或子类的状态。通过使用
writeObject 方法或使用 DataOutput 支持的用于基本数据类型的方法将各个字段写入 ObjectOutputStream,状态可以被保存。
readObject 方法负责从流中读取并恢复类字段。它可以调用 indefaultReadObject
来调用默认机制,以恢复对象的非静态和非瞬态字段。defaultReadObject
方法使用流中的信息来分配流中通过当前对象中相应指定字段保存的对象的字段。这用于处理类演化后需要添加新字段的情形。该方法本身不需要涉及属于其超类或子类的状态。通过使用
writeObject 方法或使用 DataOutput 支持的用于基本数据类型的方法将各个字段写入 ObjectOutputStream,状态可以被保存。

inreadLine(); 是要读到有换行符才结束的,在这个之前都是堵塞的
你在你发送的
outwrite("quit"); ---->>outwrite("quit/r");
outwrite("链接用时"+(end-start)+"毫秒/r"); //计算该客户链接的时间

1、首先为了方便调试,先创建一个界面用于显示客户端连接信息。
2、其次基于javafx包写的一个简单界面,使用多线程实现多客户端与服务器进行通信。
3、最后java项目内实现n个tcp客户端连接通信即可设计,安全便捷。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10451499.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-08
下一篇 2023-05-08

发表评论

登录后才能评论

评论列表(0条)

保存