java socket传输对象_Java实例 利用Socket进行网络编程:传输对象

Socket是网络上运行的两

个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上数据的传递。在Java中,有专门的Socket类来处理用

户的请求和响应。利用Socket类的方法,就可以实现两台计算机之间的通讯。这里就介绍一下在Java中如何利用Socket进行网络编程。

在Java中Socket可以理解为客户端或者服务器端的一个特殊的对象,这个对象

有两个关键的方法,一个是getInputStream方法,另一个是getOutputStream方法。getInputStream方法可以得到一

个输入流,客户端的Socket对象上的getInputStream方法得到的输入流其实就是从服务器端发回的数据流。GetOutputStream

方法得到一个输出流,客户端Socket对象上的getOutputStream方法返回的输出流就是将要发送到服务器端的数据流,(其实是一个缓冲区,

暂时存储将要发送过去的数据)。

程序可以对这些数据流根据需要进行进一步的封装。本文的例子就对这些数据流进行了一定的封装(关于封装可以参考Java中流的实现部分)。

下面是用对象序列化流对socket发送和接收的数据进行封装,实现了网络中传输对象:

通过socket传递Java对象。采用的方法就是对象序列化。方法是:通过socket建立c/s连接;通过

ObjectOutputStream,ObjectOutputStream 读写对象。唯一需要留意的是传递的java

对象需要实现Serializable标记接口。代码包括:java对象类,Employee; socket

client类;server类。主要代码如下:

java对象类:

import java.io.*;

import java.util.*;

public class Employee implements Serializable {

private int employeeNumber;

private String employeeName;

Employee(int num, String name) {

employeeNumber = num;

employeeName= name;

}

public int getEmployeeNumber() {

return employeeNumber ;

}

public void setEmployeeNumber(int num) {

employeeNumber = num;

}

public String getEmployeeName() {

return employeeName ;

}

public void setEmployeeName(String name) {

employeeName = name;

}

}

client类:

import java.io.*;import java.net.*;public class Client { public

static void main(String[] arg) { try { Employee joe = new

Employee(150, "Joe"); System.out.println("employeeNumber= " joe

.getEmployeeNumber()); System.out.println("employeeName= " joe

.getEmployeeName()); Socket socketConnection = new

Socket("127.0.0.1", 11111); ObjectOutputStream clientOutputStream =

new ObjectOutputStream(socketConnection.getOutputStream());

ObjectInputStream clientInputStream = new

ObjectInputStream(socketConnection.getInputStream());

clientOutputStream.writeObject(joe); joe=

(Employee)clientInputStream.readObject();

System.out.println("employeeNumber= " joe .getEmployeeNumber());

System.out.println("employeeName= " joe .getEmployeeName());

clientOutputStream.close(); clientInputStream.close(); } catch

(Exception e) {System.out.println(e); } }}

Server类:

import java.io.*;

import java.net.*;

public class Server {

public static void main(String[] arg) {

Employee employee = null;

try {

ServerSocket socketConnection = new ServerSocket(11111);

System.out.println("Server Waiting");

Socket pipe = socketConnection.accept();

ObjectInputStream serverInputStream = new

ObjectInputStream(pipe.getInputStream());

ObjectOutputStream serverOutputStream = new

ObjectOutputStream(pipe.getOutputStream());

employee = (Employee )serverInputStream.readObject();

employee .setEmployeeNumber(256);

employee .setEmployeeName("John");

serverOutputStream.writeObject(employee);

serverInputStream.close();

serverOutputStream.close();

} catch(Exception e) {System.out.println(e);

}

}

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值