我正在开发一个使用 UDP 协议(protocol)的 SMS 应用程序。我的应用程序需要执行以下操作,客户端向另一个客户端发送一条不超过 160 条的消息,并且他/她知道另一个客户端的 IP 地址。它将通过服务器发送,服务器将保存它,以防客户端离线。
我开始研究它,但后来我停止了!我对这些事情有疑问。
多个客户端如何发送到服务器?我搜索并读到了有关多线程的内容,任何人都可以解释或给我一个例子吗?
而且,我无法想象从客户端获取消息然后保存的过程。我的意思是服务器如何知道哪条消息属于哪个客户端?
这是我正在处理的代码
服务器:
import java.io.*;
import java.net.*;
class Server {
public static void main(String args[]) throws Exception
{
DatagramSocket serverSocket = new DatagramSocket(9876);
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
while(true)
{
DatagramPacket receivePacket =
new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
String sentence = new String(receivePacket.getData());
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
String senderSentence = "From "+IPAddress+" Msg "+sentence;
sendData = senderSentence.getBytes();
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IPAddress,
port);
serverSocket.send(sendPacket);
} } }
客户端:
import java.io.*;
import java.net.*;
public class Client {
public static void main(String args[]) throws Exception
{
String sentence;
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
DatagramSocket clientSocket = new DatagramSocket();
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
do {
System.out.println("Enter a msg , NOTE: don't exceed 160 charcter");
sentence = inFromUser.readLine();
}
while(sentence.length() >= 160);
System.out.println("Enter the adress of the other user");
String ip=inFromUser.readLine();
InetAddress IPAddress = InetAddress.getByName(ip);
sendData = sentence.getBytes();
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
clientSocket.send(sendPacket);
DatagramPacket receivePacket =
new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String modifiedSentence =
new String(receivePacket.getData());
System.out.println("FROM SERVER:" + modifiedSentence);
clientSocket.close();
} }
谢谢~
最佳答案
我不确定为什么您需要使用 UDP - 但如果这不是特殊要求,您可能需要考虑使用 Web 服务器。
我很喜欢Play Framework for Java ,它将为您处理线程。每次您向服务器发送消息时,就像发送网页请求一样,因此您可以使用 JSON 或 XML 或任何您认为最好的方式进行回复。
这比自己处理所有套接字通信要容易得多 - 但正如我所说,也许您有特殊要求。
希望这有帮助!
关于java - 短信UDP应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20012666/