1、socket通信原理
2、创建序列化对象
package com.ljb.app.socket;
import java.io.Serializable;
/**
* 用户类(实现序列化)
* @author LJB
* @version 2015年3月12日
*/
public class User implements Serializable{
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
3、创建服务端
package com.ljb.app.socket;
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 java.net.ServerSocket;
import java.net.Socket;
/**
* 服务端(接收客户端登陆信息并给出响应)
* @author LJB
* @version 2015年3月11日
*/
public class LoginServer {
/**
* @param args
*/
public static void main(String[] args) {
try {
// 建立一个服务器绑定指定端口Socket(ServerSocket)并开始监听
ServerSocket serverSocket = new ServerSocket(8800);
// 使用accept()方法阻塞等待监听,获得新的连接
Socket socket = serverSocket.accept();
// 获得输入流
InputStream is = socket.getInputStream();
// 获得流,可以对对象进行反序列化
ObjectInputStream ois = new ObjectInputStream(is);
// 获得输出流
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
// 读取用户输入信息
User user = (User)ois.readObject();
System.out.println("用户信息:" + user.getName() + " " + user.getPassword());
// 响应信息
String reply = "welcome";
pw.write(reply);
pw.flush();
// 关闭流
pw.close();
os.close();
ois.close();
is.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
4、创建客户端
package com.ljb.app.socket;
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 java.net.Socket;
import java.net.UnknownHostException;
/**
* 客户端(模拟客户登陆并接收服务端响应信息)
* @author LJB
* @version 2015年3月11日
*/
public class LoginClient {
/**
* @param args
*/
public static void main(String[] args) {
try {
// 建立客户端Socket连接,指定服务器的位置以及端口
Socket socket = new Socket("localhost",8800);
// 得到Socket的读写流
OutputStream os = socket.getOutputStream();
// 对对象进行序列化操作
ObjectOutputStream oos = new ObjectOutputStream(os);
// 获取输入流
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
// 进行写操作
User user = new User();
user.setName("Tom");
user.setPassword("123456");
oos.writeObject(user);
socket.shutdownOutput();
// 接收服务端响应
String reply = null;
while (!((reply = br.readLine()) == null)) {
System.out.println("我是客户端,服务端响应是:" + reply);
}
// 关闭流
br.close();
is.close();
oos.close();
os.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果:
服务端:
用户信息:Tom 123456
客户端:
我是客户端,服务端响应是:welcome