服务器想要向客户端应用程序发送消息(java脚本)。 如果客户端收到消息,它将激活......(实时) 我应该使用socket.io吗? 可以使用哪种库或方法?
答案 0 :(得分:0)
这取决于您喜欢的技术。 WebSockets非常适合解决实时问题。 Socket.IO能够在客户端和服务器端触发事件,并在另一端对这些事件做出反应。
Socket.IO在Node JS服务器上运行良好。 (http://nodejs.org/)
在此示例中(https://github.com/Automattic/socket.io/tree/master/examples/chat),您会看到通过socket.io实现的聊天。您可以使用开关在客户端激活事件,而不是将结果显示给用户屏幕。
答案 1 :(得分:0)
套接字编程
套接字使用TCP提供两台计算机之间的通信机制。客户端程序在通信的末尾创建一个套接字,并尝试将该套接字连接到服务器。
建立连接后,服务器会在通信结束时创建一个套接字对象。客户端和服务器现在可以通过写入和读取套接字进行通信。
java.net.Socket类表示一个套接字,java.net.ServerSocket类为服务器程序提供了一种监听客户端并与它们建立连接的机制。
使用套接字在两台计算机之间建立TCP连接时会发生以下步骤 -
服务器实例化ServerSocket对象,表示要在哪个端口号进行通信。
服务器调用ServerSocket类的accept()方法。此方法等待客户端连接到给定端口上的服务器。
服务器等待后,客户端实例化Socket对象,指定要连接的服务器名称和端口号。
Socket类的构造函数尝试将客户端连接到指定的服务器和端口号。如果建立了通信,则客户端现在具有能够与服务器通信的Socket对象。
在服务器端,accept()方法返回对连接到客户端套接字的服务器上的新套接字的引用。
建立连接后,可以使用I / O流进行通信。每个套接字都有一个OutputStream和一个InputStream。客户端的OutputStream连接到服务器的InputStream,客户端的InputStream连接到服务器的OutputStream。
有两种类型的soket:
服务器套接字 - 创建bind()到端口,listen()从客户端connect()。所以服务器只是等待对话而不开始。
创建了客户端套接字 - 以将connect()连接到listen()服务器。客户端启动连接。
服务器应用
import java.io. ; import java.net。;
公共类ServerApp {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
ServerSocket Server_Socket;
Server_Socket = new ServerSocket(5555);
Socket clientSocket = null;
clientSocket = Server_Socket.accept();
DataInputStream input;
input = new DataInputStream(clientSocket.getInputStream());
System.out.println(input.readUTF());
DataOutputStream output;
output = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = "", str2 = "";
while (!str.equals("stop"))
{
str = input.readUTF();
System.out.println("client says: " + str);
str2 = br.readLine();
output.writeUTF(str2);
output.flush();
}
input.close();
clientSocket.close();
Server_Socket.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
客户端应用
import java.io. ; import java.net。;
公共类ClientApp {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Socket Client_Socket;
Client_Socket = new Socket("localhost", 5555);
DataInputStream input;
input = new DataInputStream(Client_Socket.getInputStream());
DataOutputStream output;
output = new DataOutputStream(Client_Socket.getOutputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = "", str2 = "";
while (!str.equals("stop")) {
str = br.readLine();
output.writeUTF(str);
output.flush();
str2 = input.readUTF();
System.out.println("Server says: " + str2);
}
output.flush();
output.close();
Client_Socket.close();
} catch (Exception e) {
System.out.println(e);
}
}
}