简体   繁体   English

UDP数据报仅显示Java中的第一个字符

[英]UDP datagram only showing first character in Java

I'm trying to make an Echo server-client UDP application. 我正在尝试制作Echo服务器-客户端UDP应用程序。 The client is supposed to send over 20 numbers and the server will just send them back. 客户端应该发送20多个号码,而服务器只会将其发回。 However, from what I have, it shows only the first character from the String is being sent. 但是,据我所知,它仅显示正在发送的Stringfirst character I've asked my professor for help but he couldn't figure it out either. 我已经向我的教授寻求帮助,但他也无法解决。 Some help would be nice. 一些帮助会很好。 Thank you! 谢谢!

Client.java: Client.java:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class client {
    public static void main(String[] args) {
        DatagramSocket socket;
        try {
            socket = new DatagramSocket();
            InetAddress address = InetAddress.getByName("localhost");
            byte[] buf = new byte[256];
            for (Integer i = 1; i < 21; i++) {
                buf = i.toString().getBytes();
                DatagramPacket packet = new DatagramPacket(buf, buf.length, address, 4445);
                socket.send(packet);
                packet = new DatagramPacket(buf, buf.length);
                socket.receive(packet);
                String received = new String(packet.getData(), 0, packet.getLength());
                System.out.println("Server: " + received);
            }
            socket.close();
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

Server.java: Server.java:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class server {
    public static void main(String argsp[]) {
        DatagramSocket socket;
        try {
            socket = new DatagramSocket(4445);
            byte[] buf = new byte[256];
            DatagramPacket packet = new DatagramPacket(buf, buf.length);
            while (true) {
                socket.receive(packet);
                String message = new String(packet.getData(), 0, packet.getLength());
                System.out.println("Client: " + message);
                buf = message.getBytes();
                InetAddress address = packet.getAddress();
                int port = packet.getPort();
                packet = new DatagramPacket(buf, buf.length, address, port);
                socket.send(packet);
            }
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Client output: 客户输出:

Server: 1
Server: 2
Server: 3
Server: 4
Server: 5
Server: 6
Server: 7
Server: 8
Server: 9
Server: 1
Server: 1
Server: 1
Server: 1
Server: 1
Server: 1
Server: 1
Server: 1
Server: 1
Server: 1
Server: 2

Server output: 服务器输出:

Client: 1
Client: 2
Client: 3
Client: 4
Client: 5
Client: 6
Client: 7
Client: 8
Client: 9
Client: 1
Client: 1
Client: 1
Client: 1
Client: 1
Client: 1
Client: 1
Client: 1
Client: 1
Client: 1
Client: 2

Every time you receive a datagram the DatagramPacket shrinks to the length. 每次收到数据报时, DatagramPacket收缩到一定长度。 So, in your server, it shrinks to 1 after the first receive. 因此,在您的服务器中,第一次接收后它会缩小为1。 You need to recreate it inside the receive lopo, or a least reset its length at the top of the loop. 您需要在接收lopo内重新创建它,或者至少在循环顶部重置其长度。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM