从数据包中获取字符串大小

huangapple 未分类评论48阅读模式
英文:

Get string size from Datagram Packet

问题

以下是您提供的代码的翻译:

客户端

import java.net.*;
import java.io.*;

public class UDPClient {
  public static void main(String args[]) {
    // args给出消息内容和服务器主机名
    if (args.length != 2) {
      System.err.println("Usage: java UDPClient 'Text Message' <server hostname>");
      System.exit(1);
    }
    DatagramSocket aSocket = null;
    try {
      aSocket = new DatagramSocket();
      byte[] m = args[0].getBytes();
      InetAddress aHost = InetAddress.getByName(args[1]);
      int serverPort = 6789;

      DatagramPacket request = new DatagramPacket(m, m.length, aHost, serverPort);
      aSocket.send(request);
      byte[] buffer = new byte[1000];
      DatagramPacket reply = new DatagramPacket(buffer, buffer.length);
      aSocket.receive(reply);
      System.out.println("Reply: " + new String(reply.getData()));
      System.out.println("Reply Size: " + reply.getData().length);

    } catch (SocketException e) {
      System.out.println("Socket: " + e.getMessage());
    } catch (IOException e) {
      System.out.println("IO: " + e.getMessage());
    } finally {
      if (aSocket != null)
        aSocket.close();
    }
  }
}

服务器端

import java.net.*;
import java.io.*;

public class UDPServer {
  public static void main(String args[]) {
    DatagramSocket aSocket = null;
    try {
      aSocket = new DatagramSocket(6789);
      byte[] buffer = new byte[1000];
      while (true) {
        DatagramPacket request = new DatagramPacket(buffer, buffer.length);
        aSocket.receive(request);

        String m = new String(request.getData()).replaceAll(" ", "");
        int tam = m.length();

        DatagramPacket reply = new DatagramPacket(request.getData(), tam, request.getAddress(),
            request.getPort());
        aSocket.send(reply);
      }
    } catch (SocketException e) {
      System.out.println("Socket: " + e.getMessage());
    } catch (IOException e) {
      System.out.println("IO: " + e.getMessage());
    } finally {
      if (aSocket != null)
        aSocket.close();
    }
  }
}

请注意,我已经完成了代码的翻译,如果您需要进一步的帮助,请随时告知。

英文:

I'm new to programming and I'm studying sockets, maybe this question is stupid, but thank you for your help.

I'm trying to extract the size of a message sent to the server(number of characters), but the size of the message sent in the server response always has a different size.

Client

  import java.net.*;
    import java.io.*;

public class UDPClient {
  public static void main(String args[]) {
    // args give message contents and server hostname
    if (args.length != 2) {
      System.err.println(&quot;Usage: java UDPClient &#39;Text Message&#39; &lt;server hostname&gt;&quot;);
      System.exit(1);
    }
    DatagramSocket aSocket = null;
    try {
      aSocket = new DatagramSocket();
      byte[] m = args[0].getBytes();
      InetAddress aHost = InetAddress.getByName(args[1]);
      int serverPort = 6789;

      DatagramPacket request = new DatagramPacket(m, m.length, aHost, serverPort);
      aSocket.send(request);
      byte[] buffer = new byte[1000];
      DatagramPacket reply = new DatagramPacket(buffer, buffer.length);
      aSocket.receive(reply);
      System.out.println(&quot;Reply: &quot; + new String(reply.getData()));
      System.out.println(&quot;Reply: &quot; + reply.getData().toString().length());
     

    } catch (SocketException e) {
      System.out.println(&quot;Socket: &quot; + e.getMessage());
    } catch (IOException e) {
      System.out.println(&quot;IO: &quot; + e.getMessage());
    } finally {
      if (aSocket != null)
        aSocket.close();
    }
  }
}

Server

import java.net.*;
import java.io.*;

public class UDPServer {
	public static void main(String args[]) {
		DatagramSocket aSocket = null;
		try {
			aSocket = new DatagramSocket(6789);
			byte[] buffer = new byte[1000];
			while (true) {
				DatagramPacket request = new DatagramPacket(buffer, buffer.length);
				aSocket.receive(request);

				String m = new String(request.getData()).replaceAll(&quot; &quot;, &quot;&quot;);
				int tam = m.length();


				DatagramPacket reply = new DatagramPacket(request.getData(), tam, request.getAddress(),
						request.getPort());
				aSocket.send(reply);
			}
		} catch (SocketException e) {
			System.out.println(&quot;Socket: &quot; + e.getMessage());
		} catch (IOException e) {
			System.out.println(&quot;IO: &quot; + e.getMessage());
		} finally {
			if (aSocket != null)
				aSocket.close();
		}
	}
}

huangapple
  • 本文由 发表于 2020年5月5日 19:36:58
  • 转载请务必保留本文链接:https://java.coder-hub.com/61612223.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定