4、Socket传递对象

前节讲到是字符串的传递,这里是服务器与客户端之间对象的传递:

1、创建一个User对象要实现序列化接口:

public class User implements java.io.Serializable{
	private String name;
	private Integer age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
}
2、编写Server类:

import java.io.*;
import java.net.*;
public class Server {  
public static void main(String args[]) throws IOException, ClassNotFoundException {    
      int port = 8899;  
      //定义一个ServerSocket监听在端口8899上  
      ServerSocket server = new ServerSocket(port);  
      //server尝试接收客户端Socket的连接请求,server的accept方法是阻塞式的  
      Socket socket = server.accept();  
      ObjectInputStream ois=new ObjectInputStream(socket.getInputStream());
      User u=(User)ois.readObject();
      System.out.println("from client: " + u.getName() +"年龄:"+ u.getAge());  
      ois.close();  
      socket.close();  
      server.close();  
   }  
}


3、编写客户端:

import java.io.*;
import java.net.*;
public class Client{
	public static void main(String args[]) throws Exception {  
	     String host = "127.0.0.1";  //要连接的服务端IP地址  
	     int port = 8899;   //要连接的服务端对应的监听端口  
	     Socket client = new Socket(host, port); 
	     User u =new User();
	     u.setAge(14);
	     u.setName("skx");
	     ObjectOutputStream oos =new ObjectOutputStream(client.getOutputStream());
	     oos.writeObject(u);
	     oos.close();  
	     client.close();  
	   }  
}

运行得到:

from client: skx年龄:14




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要通过 Socket 传递列表,你可以将列表转换为字符串,然后在发送端将其编码为字节流,接收端再进行解码和转换回列表的操作。以下是一个简单的示例代码,演示了如何使用 Socket 传递列表: 发送端(client)代码: ```python import socket import pickle # 创建 Socket 连接 client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_address = ('localhost', 12345) client_socket.connect(server_address) # 要传递的列表 my_list = [1, 2, 3, 4, 5] # 将列表转换为字节流 list_bytes = pickle.dumps(my_list) # 发送字节流数据 client_socket.sendall(list_bytes) # 关闭连接 client_socket.close() ``` 接收端(server)代码: ```python import socket import pickle # 创建 Socket 连接 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_address = ('localhost', 12345) server_socket.bind(server_address) server_socket.listen(1) # 等待客户端连接 print('等待客户端连接...') client_socket, client_address = server_socket.accept() print('客户端已连接:', client_address) # 接收数据 received_bytes = b'' while True: data = client_socket.recv(4096) if not data: break received_bytes += data # 将字节流转换为列表 received_list = pickle.loads(received_bytes) # 打印接收到的列表 print('接收到的列表:', received_list) # 关闭连接 client_socket.close() server_socket.close() ``` 上述代码使用了 Python 的 `pickle` 模块来进行对象的序列化和反序列化,将列表转换为字节流进行传输。在实际应用中,你也可以使用其他的序列化方法,如 JSON。 请确保发送端和接收端的代码在相同的网络环境中运行,并使用相同的 IP 地址和端口号。 希望这个示例对你有帮助!如果你有任何进一步的问题,请随提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值