套接字+序列化问题? 想试验下JAVA 套接字编程.两台机器(局域网内)一台客户一台服务器,请问如何使客户端序列华后的对象通过流传给服务器!!!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 比如客户端机器:import java.io.*;import java.util.Date;public class SaveDate {public static void main(String argv[]) throws Exception {FileOutputStream fos = new FileOutputStream("date.out");ObjectOutputStream oos = new ObjectOutputStream(fos);Date date = new Date();oos.writeObject(date);oos.flush();oos.close();fos.close();}} 服务器:import java.io.*;import java.util.Date;public class ReadDate {public static void main(String argv[]) throws Exception {FileInputStream fis = new FileInputStream("D:\\date.out");ObjectInputStream ois = new ObjectInputStream(fis);Date date = (Date) ois.readObject();System.out.println("The date is: "+date);ois.close();fis.close();}}序列化后的对象写入客户端机器的D:\\date.out文件内,服务器端机器如何取得此文件从而反序列化??????????? 如果你用TCP呢就用这两个累 ServerSocket Socket 如果是UDP呢 就用这个DatagramSocket 以TCP/IP连接为例服务器端先建立socketpackage test;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class Server { public static void main(String[] args) { System.out.println("server start..."); try { ServerSocket ss=new ServerSocket(8888); while(true){ Socket s=ss.accept(); new ServerThread(s).start(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }建立处理程序package test;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.net.Socket;public class ServerThread extends Thread { private Socket s; private ObjectInputStream ois; private ObjectOutputStream oos; public ServerThread(Socket s) { this.s = s; try { ois = new ObjectInputStream(s.getInputStream()); oos = new ObjectOutputStream(s.getOutputStream()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void run() { try { control(); s.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void control() throws Exception { Request req = (Request) ois.readObject(); String cmdType = req.getCmdType(); if (cmdType.equals("login")) { loginHandle(req); } if (cmdType.equals("otherCmd")) { otherCmdHandle(req); } } public void loginHandle(Request req) throws Exception{ String userName = req.getParameter("userName"); String userPassword = req.getParameter("userPassword"); Response res = new Response("login"); if (userName.equals("zjz444") && userPassword.equals("8888")) { res.setDate("zjz444 welcome!"); } else { res.setDate("no such user!"); } oos.writeObject(res); } public void otherCmdHandle(Request req) { // 写入你自已对其它命令的处理方法 }} 将要求和返回值封装以便于流传输package test;import java.io.Serializable;import java.util.Properties;public class Request implements Serializable{ private String cmdType; private Properties parameters; public Request(String type){ parameters=new Properties(); cmdType=type; } public void setParameters(String key,String value){ parameters.setProperty(key, value); } public String getParameter(String key){ return parameters.getProperty(key); } public Properties getAllParameters(){ return parameters; } public String getCmdType(){ return cmdType; }}package test;import java.io.Serializable;import sun.print.resources.serviceui;public class Response implements Serializable{ private String response; private Serializable date; public Response(String response){ this.response=response; } public void setDate(Serializable date){ this.date=date; } public Serializable getDate(){ return date; } public String getRes(){ return response; }}建立客户端package test;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.net.Socket;public class Client { public static void main(String[] args) throws Exception{ System.out.println("client start..."); Socket s=new Socket("127.0.0.1",8888); ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream()); Request req=new Request("login"); req.setParameters("userName", "zjz444"); req.setParameters("userPassword", "8888"); oos.writeObject(req); oos.flush(); ObjectInputStream ois=new ObjectInputStream(s.getInputStream()); Response res=(Response)ois.readObject(); if(res.getRes().equals("login")){ System.out.println((String)res.getDate()); } }}服务器上放Server & ServerThread & Request & Response四个类 客户端上放Client & Request & Response 三个类本来想做一个多线程的,调试时遇到点问题就变成这个样了,你自已改一下. ObjectInputStreamObjectOutputStream前提,对方要有这个类,否则你只能反射调用类的方法和属性了。 请问在struts-tags如何嵌套自己的标签和EL表达式? Java 初始化的老问题 无效的游标状态——用Java连接数据库 汗。。。请问怎么往文件里写一个双引号(") 请问哪里有实现“自动完成”功能的代码? Applet 的疑惑 要改变一下小程序窗口大小才能正确显示 头大 [在线等待] JTable中如何给某个cell设置背景色,注意不是某列? 怎么改变showMessageDialog显示的字体!? 关于算法的问题 谁能回答我关于 Junit 的问题 正则表达式,Reluctant在“.”出现时无效的问题 我用java做备忘录 如何实现开机自动启动?
import java.io.*;
import java.util.Date;public class SaveDate {public static void main(String argv[]) throws Exception {
FileOutputStream fos = new FileOutputStream("date.out");
ObjectOutputStream oos = new ObjectOutputStream(fos);
Date date = new Date();
oos.writeObject(date);
oos.flush();
oos.close();
fos.close();
}
}
服务器:
import java.io.*;
import java.util.Date;public class ReadDate {public static void main(String argv[]) throws Exception {
FileInputStream fis = new FileInputStream("D:\\date.out");
ObjectInputStream ois = new ObjectInputStream(fis);
Date date = (Date) ois.readObject();
System.out.println("The date is: "+date);
ois.close();
fis.close();
}
}序列化后的对象写入客户端机器的D:\\date.out文件内,服务器端机器如何取得此文件从而反序列化???????????
ServerSocket
Socket 如果是UDP呢 就用这个
DatagramSocket
服务器端先建立socketpackage test;import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;public class Server {
public static void main(String[] args) {
System.out.println("server start...");
try {
ServerSocket ss=new ServerSocket(8888);
while(true){
Socket s=ss.accept();
new ServerThread(s).start();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}建立处理程序package test;import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;public class ServerThread extends Thread {
private Socket s;
private ObjectInputStream ois;
private ObjectOutputStream oos; public ServerThread(Socket s) {
this.s = s;
try {
ois = new ObjectInputStream(s.getInputStream());
oos = new ObjectOutputStream(s.getOutputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public void run() {
try {
control();
s.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } public void control() throws Exception {
Request req = (Request) ois.readObject();
String cmdType = req.getCmdType();
if (cmdType.equals("login")) {
loginHandle(req);
}
if (cmdType.equals("otherCmd")) {
otherCmdHandle(req);
}
} public void loginHandle(Request req) throws Exception{
String userName = req.getParameter("userName");
String userPassword = req.getParameter("userPassword");
Response res = new Response("login");
if (userName.equals("zjz444") && userPassword.equals("8888")) {
res.setDate("zjz444 welcome!");
} else {
res.setDate("no such user!");
}
oos.writeObject(res);
} public void otherCmdHandle(Request req) {
// 写入你自已对其它命令的处理方法
}}
import java.util.Properties;public class Request implements Serializable{ private String cmdType;
private Properties parameters;
public Request(String type){
parameters=new Properties();
cmdType=type;
}
public void setParameters(String key,String value){
parameters.setProperty(key, value);
}
public String getParameter(String key){
return parameters.getProperty(key);
}
public Properties getAllParameters(){
return parameters;
}
public String getCmdType(){
return cmdType;
}
}
package test;import java.io.Serializable;import sun.print.resources.serviceui;public class Response implements Serializable{
private String response;
private Serializable date;
public Response(String response){
this.response=response;
}
public void setDate(Serializable date){
this.date=date;
}
public Serializable getDate(){
return date;
}
public String getRes(){
return response;
}
}建立客户端package test;import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;public class Client { public static void main(String[] args) throws Exception{
System.out.println("client start...");
Socket s=new Socket("127.0.0.1",8888);
ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream());
Request req=new Request("login");
req.setParameters("userName", "zjz444");
req.setParameters("userPassword", "8888");
oos.writeObject(req);
oos.flush();
ObjectInputStream ois=new ObjectInputStream(s.getInputStream());
Response res=(Response)ois.readObject();
if(res.getRes().equals("login")){
System.out.println((String)res.getDate());
}
}
}服务器上放Server & ServerThread & Request & Response四个类
客户端上放Client & Request & Response 三个类本来想做一个多线程的,调试时遇到点问题就变成这个样了,你自已改一下.
ObjectOutputStream前提,对方要有这个类,否则你只能反射调用类的方法和属性了。