java 对象流传输socket_Java Socket(二)使用TCP传输对象
在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);
}
}
}
}
總結
以上是生活随笔為你收集整理的java 对象流传输socket_Java Socket(二)使用TCP传输对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 友元关系可以继承_私生子也有继承权!非婚
- 下一篇: java https双向验证_java