[英]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. 但是,据我所知,它仅显示正在发送的
String
的first 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.