[英]send objects from server to client in java sockets
我想在Java套接字中将对象从服务器发送到客户端。 我可以将它们从客户端发送到服务器,但是我正努力将它们从服务器发送到客户端。 我是Java新手,因此仍在学习基础知识。 我知道这是我需要做的相对较小的事情,但是目前我正为此而苦苦挣扎。 有人可以添加我缺少的代码吗?
在另一个线程中打开另一个连接,让客户端成为服务器,而服务器成为客户端。 因此,在一个线程中发送A-> B,在另一个线程中打开另一个套接字并开始发送b B->A。
低级别套接字的问题在于,如果一侧正在写,另一侧正在监听。 这意味着您必须实现命令查询协议,这是一项繁重的任务。 因此,根据我的建议,您将使用两个端口,但您知道将有2条数据流管道。
A --8888--> B
A <--8889-- B
如果您只是从套接字开始,那会更容易。
您可以使用ObjectOutputStream通过套接字发送一个对象,并使用ObjectInputStream接收一个对象:
private ObjectOutputStream oos;
private ObjectInputStream ois;
public SocketHandler(Socket cs) {
this.oos = new ObjectOutputStream(cs.getOutputStream());
this.ois = new ObjectInputStream(cs.getInputStream());
}
public void sendObject(Object o) {
this.oos.writeObject(o);
this.oos.flush();
}
public Object receiveObject() {
return this.ois.readObject();
}
那是假设您要发送和接收一个对象。 您还可以使用PrintWriter和BufferedReader来发送和接收String消息,并在解析之后:
private PrintWriter pw;
private BufferedReader br;
public SocketHandler(Socket cs) {
this.pw = new PrintWriter(cs.getOutputStream());
this.br = new BufferedReader(new InputStreamReader(cs.getInputStream()));
}
public void sendMsg(String msg) {
this.pw.println(msg);
this.pw.flush();
}
public String receiveMsg() {
return this.br.readLine();
}
下面是一个示例,其中有一些我之前在应用程序中使用过的服务器端代码的示例,然后我将向您解释此处的情况:
首先,您需要创建ServerSocket才能接受客户端请求(如您所知):
ServerSocket serverSocket = new ServerSocket(1002);
while(true) {
然后,只要服务器程序处于活动状态,就需要进入while循环以便接收请求
Socket clientSocket = serverSocket.accept();
System.out.println("Connection made to: " + clientSocket);
BufferedReader br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
String messageString = "";
String line;
System.out.println("Enter while loop to retrieve client message...");
while((line = br.readLine()) != null) {
String clientRequestLine = line;
if(clientRequestLine.contains("check return user credentials")) {
String userNamePassWord = clientRequestLine.replace("check return user credentials", "");
userNamePassWord = userNamePassWord.trim();
String[] userNamePassWordSplitter = userNamePassWord.split(" ");
String userName = userNamePassWordSplitter[0];
String passWord = userNamePassWordSplitter[1];
System.out.println("Username: " + userName + "\nPassword: " + passWord);
boolean isValidUserNamePassWord = ReturnPatientCredentials.checkUserNamePassWord(userName, passWord);
if(isValidUserNamePassWord) {
System.out.println("valid");
out.println("valid");
}
else {
System.out.println("invalid");
out.println("invalid");
}
}
在上面,您需要启动BufferedReader以便从客户端套接字存储InputStream(数据)。 您还需要创建一个PrintWriter,以便可以将数据发送到OutputStream,并且需要将clientSocket作为OutputStream的参数传递。 接下来,您将创建变量以从客户端获取消息和日期的“行”,并进入while循环。 然后,您可以将行存储在变量中,并读取数据或您需要执行的任何操作。 我们使用PrintWriter(out)通过println()方法将数据发送回去,然后在需要时可以跳出循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.