在Java Socket使用TCP的基础上,通过ObjectInputStream和ObjectOutputStream来读写对象。
//传输的对象,需要序列化
package socket;
import java.io.Serializable;
public class MsgTO implements Serializable
{
private static final long serialVersionUID = 1L;
private String msg;
private int status;
private String response;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getResponse() {
return response;
}
public void setResponse(String response) {
this.response = response;
}
}
//客户端
public class SocketClient
{
private final Logger logger = LoggerFactory.getLogger(getClass());
public static void main(String args[]) throws Exception
{
Socket socket = new Socket("192.168.100.236", 2221);
System.out.println("socket created");
//send request
OutputStream os = socket.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os);
System.out.println("send hello");
MsgTO obj = new MsgTO();
obj.setMsg("Hello");
oos.writeObject(obj);;
oos.flush();
socket.shutdownOutput();
//receive response
InputStream is = socket.getInputStream();
ObjectInputStream ois = new ObjectInputStream(is);
obj = (MsgTO) ois.readObject();
System.out.println("Received:"+obj);
if(obj != null)
{
System.out.println("status="+obj.getStatus());
System.out.println("response="+obj.getResponse());
}
socket.shutdownInput();
//close resource
oos.close();
os.close();
socket.close();
}
}
//服务端
public class SocketServer
{
public static void main(String args[]) throws Exception
{
ServerSocket serverSocket = new ServerSocket(2221);
System.out.println("server socket created");
//for multiple clients
while (true) //循环监听,等待客户端的连接
{
System.out.println("***");
Socket socket = serverSocket.accept();
ServerHandler serverHandler = new ServerHandler(socket);
serverHandler.setPriority(4);//设置线程的优先级来保证运行速度, 范围为[1,10], 默认为5.
serverHandler.start();
}
}
}
class ServerHandler extends Thread
{
private final Logger logger = LoggerFactory.getLogger(getClass());
//与本线程相关的Socket
private Socket socket = null;
public ServerHandler(Socket socket)
{
this.socket = socket;
}
//线程执行的操作
//for object
public void run()
{
InputStream is = null;
ObjectInputStream ois = null;
OutputStream os = null;
ObjectOutputStream oos = null;
try
{
//receives request
is = socket.getInputStream();
ois = new ObjectInputStream(is);
MsgTO obj = (MsgTO) ois.readObject();
logger.debug("received:" + obj);
if(obj!=null)
{
logger.debug("status=" + obj.getStatus());
logger.debug("msg=" + obj.getMsg());
}
socket.shutdownInput();
//deal is still to do
//send response
os = socket.getOutputStream();
oos = new ObjectOutputStream(os);
logger.debug("send response");
if(obj != null)
{
obj.setStatus(0);
obj.setResponse("123");
oos.writeObject(obj);
}
oos.flush();
socket.shutdownOutput();
} catch (Exception ex)
{
logger.error(ex.getMessage());
ex.printStackTrace(System.out);
} finally
{
try //close resource
{
oos.close();
ois.close();
is.close();
socket.close();
} catch (Exception ex)
{
ex.printStackTrace(System.out);
}
}
}
}