java - 短信UDP应用

标签 java windows sockets udp sms

我正在开发一个使用 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/

相关文章:

sockets - TCP套接字的传输时间

java - 语言更改后 onActivityResult 崩溃

java - Xuggle 无法打开内存输入

windows - Linphone 配置导致多个未定义的 Autotools 宏

python - Windows Python 解释器在 Ctrl+C 时退出

c - 如果我使用 select() 服务器编写一个对等 2 个对等应用程序而不使用 fork()、线程、共享内存、信号量,这样可以吗?

java - 如何使用 Apache PDFBox 从 PDF 中的按钮图标中提取图像?

java - 如何使用 Java Socket 从远程 Http 服务器下载图像?

c# - 如何在 .NET 3.5 中获取 CSIDL_COMMON_DOCUMENTS 的路径?

ruby - 如何在 Ruby 中为 clamd 实现 INSTREAM 协议(protocol)?