1基于TCP协议的序列化传输
第一:先创建一个用户类User并且实现Serializable接口,拥有序列化的能力
第二:创建一个客户类
第三:创建一个主机类
第四:创建主机的线程类
如何创建一个客户类:
首先先将关键字socket出来,需要传入的参数有,主机的IP地址,和对应的端口号
然后用socket.get 获取输出流,
将输出流作为参数,创建序列化流,objectoutputstream
然后实例化对象,并将其传给主机端,使用socket.shutdowmoutput()关闭输出流,
若主机端收到将回复信息,于是创建一个输入流用socket.get获取,将其包装成BufferedReader
然后将主机的回复的内容写出来。
如何创建一个主机类:
先new出serversocket,传入固定端口
采用while(true)循环在其中进行监听,假如有客户请求,则实例化一个对应线程,将socket作为参数传入
如何创建线程类:
自定义一个socket属性,并创建构造方法,必要参数为socket
创建输入流,读取客户信息,创建输出流,给用户回复
关闭所有资源,释放资源
代码演示:(这个是包含了dowhile 循环的多次通话的)
* 顾客类,向淘宝客服询问问题
* @author 金前旺
*
*/
public class LoginClient {
public static void main(String[] args) {
OutputStream os = null;
BufferedWriter bw = null;
InputStream is = null;
BufferedReader br = null;
try {
//先确定我们需要访问的客服地址
Socket socket = new Socket("localhost", 5000);
//然后把我们的请求发给他
os = socket.getOutputStream();
bw = new BufferedWriter(new OutputStreamWriter(os));
is = socket.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
Scanner input =new Scanner(System.in);
do {
System.out.println("请输入你要发送的消息(y退出):");
String info = input.next();
if (info.equals("y")) {
return;
}
bw.write(info);
//暂时关闭输出资源,然后等待客服的回复
os.flush();
bw.flush();
String str = null;
while((str = br.readLine())!=null){
System.out.println(str);
}
} while (true);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if (br!=null) {
br.close();
}
if (is!=null) {
is.close();
}
if (bw!=null) {
bw.close();
}
if (os!=null) {
os.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
* 客服类,回答客户问题,每个顾客对应一名顾客
* @author 金前旺
*
*/
public class LoginServer {
public static void main(String[] args) {
//这个只监视一个接口
try {
ServerSocket serverSocket = new ServerSocket(5000);
while (true) {
Socket socket = serverSocket.accept();
MyThread thread = new MyThread(socket);
thread.start();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
* 客服需要做的事情,有客户来咨询就给回复
* @author 金前旺
*
*/
public class MyThread extends Thread{
private Socket socket;
public MyThread(Socket socket) {
super();
this.socket = socket;
}
public void run() {
InputStream is = null;
BufferedReader br = null;
OutputStream os = null;
BufferedWriter bw = null;
try {
//顾客来访问了,我们先接收问题
is = socket.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
os = socket.getOutputStream();
bw = new BufferedWriter(new OutputStreamWriter(os));
do {
String info = null;
while((info = br.readLine())!=null){
System.out.println(info);
}
//问题接受完毕,我们要根据问题来进行回复亲
Scanner input = new Scanner(System.in);
System.out.println("请输入回复的话(y退出):");
String str = input.next();
if (str.equals("y")) {
return;
}
bw.write(str);
bw.flush();
os.flush();
} while (true);
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if (bw!=null) {
bw.close();
}
if (os!=null) {
os.close();
}
if (br!=null) {
br.close();
}
if (is!=null) {
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}