如何用java将客户机系统的属性发送到服务器计算机?

t30tvxxf  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(200)

我想创建一个java应用程序,将客户端计算机的完整系统信息发送到服务器计算机。在下面的程序中,我能够完成任务,但是当消息遇到一个空格时,它会被拆分。我试图删除分割方法,但它不起作用。
客户端应该以一行一行的格式将信息发送到服务器。
p、 我参考了youtube视频教程。
客户端.java

import java.io.*;
import java.net.*;
import java.util.Properties;

public class MyClient 
{
    public static void main(String args[])
    {
        DatagramSocket datagramSocket;

        try {
        datagramSocket=new DatagramSocket();    //Creating Datagram socket
        String message=System.getProperties().toString();     //Creating message

        byte [] bytes=message.getBytes();       //Converting string message to byte format
        InetAddress host= InetAddress.getByName("localhost");       //Specifying server address
        int server_socket=6780;                 //Defining the socket tot be used

            //Sending
            DatagramPacket request= new DatagramPacket(bytes,bytes.length,host,server_socket);
            datagramSocket.send(request);

            //Receiving
            byte[] buffer=new byte[1000];
            DatagramPacket reply= new DatagramPacket(buffer,buffer.length);
            datagramSocket.receive(reply);

            //Printing the reply
            System.out.println("Client Received: "+new String(reply.getData()));

            //Closing the socket
            datagramSocket.close();
        }

        catch (Exception e)
        {

        }
    }
}

**Server.java**

import javax.xml.crypto.Data;
import java.io.*;
import java.net.*;

    public class MyServer
 {

        public static void main(String[] args)
 {
            DatagramSocket datagramSocket=null;

            try {
                datagramSocket = new DatagramSocket(6780);
                byte[] buffer = new byte[1000];
                int i=0;

                while (true) {
                    DatagramPacket request = new DatagramPacket(buffer, buffer.length);
                    datagramSocket.receive(request);

                    String [] arrayMsg= (new String(request.getData())).split(" ");
                    byte [] sendMessage=(arrayMsg[i]+"  Server Processed").getBytes();
                    DatagramPacket reply=new DatagramPacket(sendMessage,sendMessage.length,request.getAddress(),request.getPort());

                    datagramSocket.send(reply);
                    i++;

                }
            }

        catch (Exception e) {

                }
            }
        }
tgabmvqs

tgabmvqs1#

如果要避免在每个空间拆分为多个数据包,请删除在遇到某些空间时拆分为数据包的循环:
因此,请更换:

while (true) {
  DatagramPacket request = new DatagramPacket(buffer, buffer.length);
  datagramSocket.receive(request);
  String [] arrayMsg= (new String(request.getData())).split(" ");
  byte [] sendMessage=(arrayMsg[i]+"  Server Processed").getBytes();
  DatagramPacket reply=new DatagramPacket(sendMessage,sendMessage.length,request.getAddress(),
    request.getPort());
  datagramSocket.send(reply);
  i++;
  }
}

签署人:

DatagramPacket request = new DatagramPacket(buffer, buffer.length);
  datagramSocket.receive(request);
  byte [] sendMessage = (request.getData() + " Server Processed").getBytes();
  DatagramPacket reply = new DatagramPacket(sendMessage,
                         sendMessage.length, request.getAddress(), request.getPort());
  datagramSocket.send(reply);

另一种方法是在行尾分开。
不要忘记,使用这样的udp,您可以:
无序数据包
拥塞条件下cas中的丢包

相关问题