gpt4 book ai didi

java - 如何修复服务器的输出,使其正确显示来自客户端的消息?

转载 作者:行者123 更新时间:2023-12-02 04:33:22 26 4
gpt4 key购买 nike

向服务器发送消息的过程似乎是正确的,但服务器没有显示它收到的数据。我怎样才能让它正常工作?

客户端:

void manageClient(){
try(DatagramChannel datagramChannel = DatagramChannel.open();
Scanner input = new Scanner(System.in)){
datagramChannel.connect(socketAddress);
while (true){
ByteBuffer buf = ByteBuffer.allocate(512);
String r = input.nextLine();
buf.put(r.getBytes());
datagramChannel.send(buf, socketAddress);
messageToSend = null;
buf.clear();
}
}
catch (IOException e){
e.printStackTrace();
System.out.println("Cannot connect to the server!");
}
}

服务器端:

    byte[] message = new byte[512];
DatagramPacket datagramPacket = new DatagramPacket(message, message.length);
void manageServer(){
System.out.println("Waiting for the messages.");
try(DatagramSocket datagramSocket = new DatagramSocket(7755)){
try {
while(true){
datagramSocket.receive(datagramPacket);
byte[] tobeString = datagramPacket.getData();
String q = new String(tobeString, 0, tobeString.length);
System.out.println("Server got: " + q);
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("An error with input.");
}
}
catch(SocketException e){
System.out.println("A problem with connection occurred!");
}
}

按“Enter”后,服务器不会显示收到的消息。

最佳答案

解决方案是在客户端进行一些更改:

while (true){
ByteBuffer buf = ByteBuffer.allocate(512);
r = input.nextLine();
buf.put(r.getBytes());
buf.flip();
datagramChannel.send(buf, socketAddress);
r = null;
messageToSend = null;
buf.clear();
}

我更改了对字符串的引用,并将 .flip() 方法添加到缓冲区。

希望它对有类似问题的其他人有用。

关于java - 如何修复服务器的输出,使其正确显示来自客户端的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56564113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com