服务器想要向客户端应用程序发送消息(java脚本)。如果客户收到消息,它将激活某事(实时)我应该使用socket.io吗?可以使用什么样的库或方法?
套接字编程
套接字提供使用TCP的两台计算机之间的通信机制。客户端程序在其通信端创建一个套接字,并尝试将该套接字连接到服务器。
当建立连接时,服务器在其通信端创建一个套接字对象。客户端和服务器现在可以通过对套接字进行写入和读取来进行通信。
java.net.Socket类表示一个套接字,java.net.ServerSocket类为服务器程序提供了一种机制,用于侦听客户端并与它们建立连接。
使用套接字−在两台计算机之间建立TCP连接时,将执行以下步骤
服务器实例化ServerSocket对象,表示要在哪个端口号上进行通信
服务器调用ServerSocket类的accept()方法。此方法等待,直到客户端连接到给定端口上的服务器
在服务器等待之后,客户端实例化一个Socket对象,指定要连接的服务器名称和端口号
Socket类的构造函数尝试将客户端连接到指定的服务器和端口号。如果建立了通信,则客户端现在具有能够与服务器通信的Socket对象。
在服务器端,accept()方法返回对服务器上连接到客户端套接字的新套接字的引用。
在建立连接之后,可以使用I/O流进行通信。每个套接字都有一个OutputStream和一个InputStream。客户端的OutputStream连接到服务器的InputStream,客户端的InputStream连接到服务端的OutputStream。
有两种类型的soket:
服务器套接字-用于绑定()到端口,并为客户端的connect()列出()。因此,服务器只是在等待对话,而不启动对话。
客户端套接字-用于连接()到listen()服务器。客户端启动连接。
服务器应用程序
导入java.io.;导入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);
}
}
}
客户端应用程序
导入java.io.;导入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);
}
}
}
这取决于您喜欢什么技术。WebSockets非常适合解决实时问题。Socket.IO能够在客户端和服务器端激发事件,并在另一端对这些事件做出反应。
Socket.IO在NodeJS服务器上运行良好。(http://nodejs.org/)
在本例中(https://github.com/Automattic/socket.io/tree/master/examples/chat)你可以看到通过socket.io实现的聊天。你可以简单地用开关在客户端触发事件,而不是在用户屏幕上显示结果。