|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
public class UDPReceiverA {
public static void main(String[] args) throws IOException {
byte[] bytes = new byte[1024];
DatagramSocket socket = new DatagramSocket(8888);
DatagramPacket packet = new DatagramPacket(bytes, 1024);
socket.receive(packet);
byte[] data = packet.getData();
int len = packet.getLength();
System.out.println(new String(data, 0, len));
//对接收端发送 “好的,明天见”
// String str = "好的,明天见";
byte[] buf = "好的,明天见".getBytes();
if (buf.length < packet.getLength()) {
int balenceLen = packet.getLength() - buf.length;
byte[] b = " ".getBytes();
for (int i = 0; i < balenceLen; i++) {
packet.setData(b, buf.length-1, balenceLen);
}
}
packet.setData(buf, 0, buf.length);
socket.connect(InetAddress.getLocalHost(), 9999);
socket.send(packet);
socket.close();
}
}
为什么会报错1
你没有提供报错信息,因此很难确定错误的原因。请在问题中提供具体的报错信息,这样我才能给出更准确的答复。
不过,根据代码推测出可能存在的问题:
- 因为调用了 socket.connect() 方法,所以发送数据时需要使用 socket.send() 方法而不是 socket.sendto() 方法。如果你使用了错误的发送方法,那么就会抛出错误。
- 在发送数据之前,你将 DatagramPacket 对象的数据部分填充了多余的空格,如果此时数据包长度超过了原始字节数组的长度,那么就会抛出 IndexOutOfBoundsException 错误。因此,需要检查数据包长度是否超出原始数组长度的限制,并仅向数据包中添加必要的空格。
- 在发送数据包之前,需要清空数据包的缓冲区,否则将会发送包含有旧数据的数据包。可以通过调用 DatagramPacket.setData() 或 DatagramPacket.setLength() 方法来清空缓冲区。
希望这些信息对你有所帮助。如果你能够提供更多的具体信息和错误信息,我也可以给出更加详细的解答
|
|