工作中常常会用到对远程服务的访问,但是又不是同一个项目,或者是有权限的访问,
可以用到socket进行数据的传输,将服务装安装在服务端,将class文件变成服务,以响应客户端的请求。(下期介绍)
这里先来讲述下,java下socket对象流的传输
话不多少,用一个小例子来实现。
//客户端代码
public class SocketClient {
Socket client;
PrintWriter pw;
public SocketClient() throws UnknownHostException, IOException
{
//new一个client对象(ip,端口)
client = new Socket("127.0.0.1", 4700);
List ll = new ArrayList();
List list = new ArrayList();
list.add("555");
list.add("666");
//new一个Object输出流对象从client端得到流;
ObjectOutputStream oos = new
ObjectOutputStream(client.getOutputStream());
//new一个Object输入流对象(这个是从服务端传过来的)
ObjectInputStream ois = new
ObjectInputStream(client.getInputStream());
//将list对象传送到服务端
oos.writeObject(list);
try {
System.out.println(((List)ois.readObject()).get(0));
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
oos.close();
ois.close();
// pw.close();
// br.close();
}
public static void main(String[] args) {
try {
new SocketClient();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//服务端代码
public class SocketServer {
private Socket socket;
private ServerSocket ss;
public SocketServer() throws IOException {
//启动ServerSocket(监控4700端口,端口可配,但必须大于1024)
ss = new ServerSocket(4700);
while (true) {
//监控客户端
socket = ss.accept();
List ll = new ArrayList();
List list = new ArrayList();
// BufferedReader br = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
//新建一个输入流对象,从客户端获得流.
ObjectInputStream ois = new
ObjectInputStream(socket.getInputStream());
//新建一个Object输出流对象.
ObjectOutputStream oos = new
ObjectOutputStream(socket.getOutputStream());
// User u = new User();
// User u1 = new User();
try {
//读取流对象(因为已知传输过来的是list就强转成list)
ll = (List)ois.readObject();
list.add("333");
list.add("222");
//此为返回给客户端的list
oos.writeObject(list);
//完成后关闭流
oos.flush();
oos.close();
ois.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println("you input is : " + ll.get(0));
}
}
public static void main(String[] args) {
try {
new SocketServer();
} catch (IOException e) {
e.printStackTrace();
}
}
}
具体,将服务端代码编译成class文件之后转换成win服务。随时响应客户端的请求,达到传输数据的目的。