socket 获取回传信息_socket通信原理(升级用户登录传递对象)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值