客户端代码:
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class TCPClient extends Thread{
@Override
public void run() {
Scanner reader = new Scanner(System.in);
while (true) {
System.out.println("输入Message的ID");
int id = reader.nextInt();
System.out.println("请输入Message的内容");
String content = reader.next();
Message msg = new Message(id,content);
try {
Socket socket = new Socket("127.0.0.1", 8802);
ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
out.writeObject(msg);
out.close();
socket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
服务器段代码:
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer extends Thread{
@Override
public void run() {
try {
ServerSocket mServerSocket = new ServerSocket(8802);
Socket mSocket;
while (true) {
mSocket = mServerSocket.accept();
ObjectInputStream in = new ObjectInputStream(mSocket.getInputStream()) ;
Message message = (Message) in.readObject();
System.out.println(message);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
分享到:
相关推荐
这是一个用C#写的Socket服务器和客户端,当然Socket服务器和客户端不是主要的(有兴趣的朋友可以参考下),主要的内容是介绍如何通过这种Socket方式发送Object对象。 作者博客 http://luyugao.com
4. **发送序列化对象**:通过已建立的TCP连接,将序列化后的字节流写入Socket的输出流。 5. **接收和反序列化**:在另一端,从Socket的输入流读取字节流,然后使用相应的反序列化方法恢复为对象。 6. **关闭连接**...
客户端代码会创建Socket,序列化对象并发送,而服务器端代码则会接收数据,反序列化并进行相应的处理。通过查看和分析这两个文件,我们可以更深入地了解如何在实际项目中应用序列化技术进行TCP/IP通信。 值得注意的...
服务器接收并反序列化这个字节流,恢复出Student对象,从而完成了一次基于Socket的序列化对象通信。 总结,Socket通信结合对象序列化提供了一种有效的方式,让网络上的不同系统可以共享和交换自定义的Java对象。这...
在Qt环境中,它用于对象的序列化和反序列化,即将对象转换为字节流以便在网络或磁盘上存储,或者将字节流恢复为原始对象。在TCP通信中,QDataStream使得数据的打包和解包更加直观,因为它允许我们以类型安全的方式...
总结来说,QT通过TCP发送和接收自定义结构体的关键步骤包括:结构体的序列化和反序列化、建立和管理TCP连接、以及错误处理。利用QT提供的QDataStream和QTcpSocket类,我们可以轻松实现高效、可靠的网络通信。
为了序列化和反序列化对象,我们需要添加`System.Runtime.Serialization`和`System.IO`命名空间,并使用`BinaryFormatter`类。以下是一个简单的示例: ```csharp using System.Runtime.Serialization.Formatters....
在本资料中包含的6个关于网络编程的例子可能涵盖了如何创建基本的TCP服务器和客户端、如何处理并发连接、如何使用序列化技术发送复杂对象、以及如何实现一个简单的聊天应用等。这些例子对于学习和理解C#网络编程至关...
反序列化是将之前通过序列化过程转换为字节流的数据恢复成原来的对象或结构的过程。在protobuf中,序列化是将结构化的对象或消息转换为二进制格式,便于在网络传输或存储时节省空间和提高效率。而反序列化则是相反...
在进行Java序列化时,我们通常会使用`ctx.writeAndFlush()`方法将序列化后的对象发送出去。 4. **自定义序列化解码器**: 虽然Java序列化是内建的,但在实际应用中,可能需要自定义编码和解码器以满足特定需求。...
序列化可以将对象转化为字节流,通过HTTP、TCP/IP等协议进行传输,然后在接收端进行反序列化恢复。 3. **进程间通信**:在分布式系统中,不同进程间的对象交换也需要序列化,以便于在进程之间传递消息。 4. **缓存...
Kryo则是一种高效的Java对象序列化库,能够快速地序列化和反序列化对象,尤其适合于内存有限或者需要高速传输数据的场景。 本主题“netty传输kryo序列化的对象基于socket传输”探讨的是如何结合Netty和Kryo,实现...
- **优点**:序列化可以帮助持久化对象状态,方便数据传输,跨进程通信,以及在不同时间点恢复对象状态。 2. **网络通信**: - **TCP/IP协议**:在局域网和互联网上,数据传输通常基于TCP/IP协议。TCP是一种面向...
总结来说,这个示例展示了如何使用JMeter与基于Vert.x和Kotlin的服务端进行TCP通信,涉及到了protobuf的序列化和反序列化,以及JMeter的TCP测试功能。通过这个实践,开发者可以更好地理解网络通信、性能测试和协议...
3. **序列化对象**:使用`writeObject()`方法将对象写入`ObjectOutputStream`。 ```java os.writeObject(myObject1); os.writeObject(myObject2); os.writeObject(myObject3); ``` 4. **关闭`...
序列化的主要目的是为了能够恢复对象,也就是接下来我们要讨论的反序列化。 反序列化则是序列化的逆过程,它将字节流转换回原来的对象状态。这个过程使得程序可以在后续的运行时重新创建和使用之前保存的对象,或者...
2. 通过网络协议(如HTTP、TCP/IP或其他自定义协议)将序列化后的数据发送到其他语言的应用。 3. 在接收端,根据接收的数据格式(如JSON),使用相应的解析库将数据转换回本地语言的数据结构。 4. 反序列化完成后,...
序列化是将对象的状态转换为可存储或可传输的形式的过程。这通常涉及到将对象的属性和结构转换成字节流,以便可以在内存、磁盘或通过网络发送。反序列化则是相反的过程,即从字节流中恢复出原始对象。这两个过程在...
4. 序列化JSON数据:使用cJSON库,将JavaScript字段转换成JSON格式的字符串。例如,你可以创建一个cJSON对象,然后添加键值对,最后用`cJSON_PrintPreallocated()`或`cJSON_PrintUnformatted()`函数生成JSON字符串。...
例如,CSocket类提供了基本的套接字操作,CSocketFile将套接字包装成文件,而CArchive则提供了类似于序列化对象的方法,使得数据交换更加方便。 在实际应用中,为了提高程序的健壮性,我们还需要处理各种异常情况,...