【发布时间】:2014-04-02 09:55:30
【问题描述】:
基本上我想每当客户端连接它会发送一个字符串“连接”到服务器。作为响应,服务器应该为该客户端启动一个线程,该线程将在 5 秒后继续向客户端发送“唤醒”消息。
我在服务器上使用了 Timer 类,但它无法在同一个套接字上 ping 客户端。你能告诉我一些方法吗?示例代码将是有益的。
代码:-
import java.io.BufferedReader;
public class Server2 {
public static void main(String[] args) {
Server ob = new Server();
ob.dt();
}
}
class Server {
public static Socket socket;
public void dt() {
try {
int port = 25000;
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("Server Started and listening to the port 25000");
// Server is running always. This is done using this while(true) loop
while (true) {
// Reading the message from the client
socket = serverSocket.accept();
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String number = br.readLine();
if (number.equals("2")) {
System.out.println("asda");
TimerExampleRepeating tr = new TimerExampleRepeating();
tr.heartbeat(this);
} else if (number.equals("disconnect")) {
} else {
System.out.println("Message received from client is " + number);
// Multiplying the number by 2 and forming the return message
String returnMessage;
try {
int numberInIntFormat = Integer.parseInt(number);
int returnValue = numberInIntFormat * 2;
returnMessage = String.valueOf(returnValue) + "\n";
} catch (NumberFormatException e) {
// Input was not a number. Sending proper message back to client.
returnMessage = "Please send a proper number\n";
}
// Sending the response back to the client.
OutputStream os = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
bw.write(returnMessage);
System.out.println("Message sent to the client is " + returnMessage);
bw.flush();
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
socket.close();
} catch (Exception e) {
}
}
}
public void clientsend(String message) {
try {
OutputStream os = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
bw.write(message);
System.out.println("Message sent to the client is " + message);
bw.flush();
} catch (Exception e) {
}
}
}
class TimerExampleRepeating {
public void heartbeat(final Server srv) throws Exception {
// Creating timer which executes once after five seconds
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
try {
System.out.println("Message sent to the client is I am up1");
srv.clientsend("I am Up");
System.out.println("Message sent to the client is I am up3");
} catch (Exception e) {
}
// System.out.println("Message sent to the client is I am up");
}
}, 5000, 5000);
}
}
谢谢
【问题讨论】:
-
你可能想看看Servlet 3.0 Server Push
-
"示例代码将是有益的" > 马上回来!请发布您当前的实现,以便我们尝试看看有什么问题。
-
@duncan 我已经更新了
-
您尚未共享客户端代码。请分享。
标签: java sockets timer client-server