Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java字符串中的垃圾_Java - Fatal编程技术网

java字符串中的垃圾

java字符串中的垃圾,java,Java,我正在为学校构建一个简单的客户机/服务器程序。 服务器从客户端接收消息并在控制台中显示 它使用Java和UDP套接字。 客户端和服务器都在工作 我的问题出在服务器上。 在控制台中显示消息后,它会用垃圾(更准确地说是小正方形)填充行的其余部分 客户资料来源: import java.io.*; import java.net.*; public class Main { public Main() { // TODO Auto-generated constructo

我正在为学校构建一个简单的客户机/服务器程序。 服务器从客户端接收消息并在控制台中显示

它使用Java和UDP套接字。 客户端和服务器都在工作

我的问题出在服务器上。 在控制台中显示消息后,它会用垃圾(更准确地说是小正方形)填充行的其余部分

客户资料来源:

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


public class Main {

    public Main() {
        // TODO Auto-generated constructor stub
    }

    public static void main(String[] args) {
        int argc = args.length;
        if (argc!=2){
            System.out.println("Syntax:");
            System.out.println("java javaUDPclient ip/hostname port");
            return;
        }

        String hostname = args[0];
        int port = Integer.parseInt(args[1]);

        //create
        try{
            System.out.println ("Binding to a local port");
            // CREATE A DATAGRAM SOCKET, BOUND TO ANY AVAILABLE LOCAL PORT
            DatagramSocket socket = new DatagramSocket();
            System.out.println ("Bound to local port " + socket.getLocalPort());

            // CREATE A MESSAGE TO SEND USING A UDP PACKET
            String message = new String("Time");

            // GET THE CONTENTS OF OUR MESSAGE AS AN ARRAY OF BYTES
            byte[] barray = message.getBytes();

            // CREATE A DATAGRAM PACKET, CONTAINING OUR BYTE ARRAY
            DatagramPacket packet = new DatagramPacket( barray, barray.length );
            System.out.println ("Looking up hostname " + hostname );

            // LOOKUP THE SPECIFIED HOSTNAME, AND GET AN INETADDRESS 
            InetAddress addr = InetAddress.getByName(hostname); 
            System.out.println ("Hostname resolved as "+addr.getHostAddress()); 
            // ADDRESS PACKET TO SENDER 
            packet.setAddress(addr); 
            // SET PORT NUMBER TO 2000 
            packet.setPort(port); 

            // SEND THE PACKET - REMEMBER NO GUARANTEE OF DELIVERY socket.send(packet); 
            socket.send(packet);
            System.out.println ("Packet sent!");
}catch (UnknownHostException e){
            System.err.println ("Can't find host " + hostname); 

        }catch (IOException e){ 
            System.err.println ("Error - " + e); 
        }

    }

}
服务器源:

package progd.java.udp.time.server;

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

public class UDPserver {

    public static void main(String[] args) {
        try{ 
            System.out.println ("Binding to local port 6001"); 

            // CREATE A DATAGRAM SOCKET, BOUND TO THE SPECIFIC PORT 6001 
            DatagramSocket socket = new DatagramSocket(6001); 

            // CREATE A DATAGRAM PACKET WITH A MAXIMUM BUFFER OF 256 BYTES 
            DatagramPacket packet = new DatagramPacket(new byte[256], 256); 

            // RECEIVE A PACKET (BY DEFAULT, THIS IS A BLOCKING OPERATION) 
            socket.receive(packet);
            String message = new String(packet.getData()); 

            // DISPLAY PACKET INFORMATION
            InetAddress remote_addr = packet.getAddress();
            System.out.println("Sent by: " + remote_addr.getHostAddress());
            System.out.println ("Sent from port: " + packet.getPort());
            System.out.println("Message:\n"+ message);

            socket.close();
        }
        catch (IOException e){
            System.err.println ("Error - " + e);
            }
        }
}
客户端控制台输出:

Binding to a local port
Bound to local port 58534
Looking up hostname localhost
Hostname resolved as 127.0.0.1
Packet sent!
服务器控制台输出: (如果我从控制台复制粘贴,则文本编辑器中无法识别正方形,因此,我将制作一个printscrean)

我是否缺少“string endig”字符

感谢

正如的JavaDoc所说:

接收到的数据或要发送的数据从缓冲区中的
偏移量开始,并运行
长度

这意味着您得到的整个
字节[]
不一定有效-您必须提取其中相关的部分。在客户端尝试以下操作:

new String(packet.getData(), packet.getOffset(), packet.getLength());

我们正在使用构造函数。

这似乎是相关的:你是对的。我正在将所有“byte[]”转换为字符串。但是,我没有在客户机上使用,而是在服务器上使用了该代码,因此,现在,我使用了“字符串消息=新字符串(packet.getData(),packet.getOffset(),packet.getLength());”而不是“字符串消息=新字符串(packet.getData());”。谢谢你的帮助;)