[英]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.