资源描述
Java Socket接收和发送(对象传递)
1.传递的对象
User.java
package pb.socket.LoginStr;
import java.io.Serializable;
public class User implements Serializable{
private String loginName;
private String psw;
public User(){
}
public User(String loginName,String psw){
this.loginName=loginName;
this.psw=psw;
}
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getPsw() {
return psw;
}
public void setPsw(String psw) {
this.psw = psw;
}
}
2.客户端
LoginClient.java
package pb.socket.LoginStr;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import .Socket;
import .UnknownHostException;
public class LoginClient {
public static void main(String[] args) {
try {
//1.建立客户端socket连接,指定服务器位置及端口
Socket socket =new Socket("localhost",8800);
//2.得到socket读写流
OutputStream os=socket.getOutputStream();
//对象序列化流
ObjectOutputStream oos=new ObjectOutputStream(os);
//输入流
InputStream is=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
//3.利用流按照一定的操作,对socket进行读写操作
User user=new User();
user.setLoginName("zhangxun");
user.setPsw("123456");
oos.writeObject(user);
socket.shutdownOutput();
//接收服务器的相应
String reply=null;
while(!((reply=br.readLine())==null)){
System.out.println("接收服务器的信息:"+reply);
}
//4.关闭资源
br.close();
is.close();
oos.close();
os.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.服务器端
LoginServer.java
package pb.socket.LoginStr;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import .ServerSocket;
import .Socket;
public class LoginServer {
public static void main(String[] args) {
try {
//1.建立一个服务器Socket(ServerSocket)绑定指定端口
ServerSocket serverSocket=new ServerSocket(8800);
//2.使用accept()方法阻止等待监听,获得新连接
Socket socket=serverSocket.accept();
//3.获得输入流
InputStream is=socket.getInputStream();
//获得流:可以对对象进行反序列化
ObjectInputStream ois=new ObjectInputStream(is);
//获得输出流
OutputStream os=socket.getOutputStream();
PrintWriter pw=new PrintWriter(os);
//4.读取用户输入信息
User user = (User)ois.readObject();
System.out.println("用户信息 :"+user.getLoginName()+"---"+user.getPsw());
//给客户一个响应
String reply="welcome";
pw.write(reply);
pw.flush();
//5.关闭资源
pw.close();
os.close();
ois.close();
is.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
展开阅读全文