#java #networking #udp
#java #сеть #udp
Вопрос:
Есть домашнее задание по созданию клиентского кода для отправки строки, разделенной на 2 переменные, через UDP. Сервер получает и подтверждает, отправляя две разделенные переменные обратно на передний план.
По какой-то причине мой ответ пустой, когда я его запускаю, и не уверен, почему. кто-нибудь может помочь, пожалуйста?
Когда я пытаюсь сделать это с целыми числами в другом коде, это работает, но когда я пытаюсь выполнить строки, ничего не возвращается.
Клиентский код:
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class UDPClient
{
public static void main (String[] args) throws Exception
{
DatagramSocket client = new DatagramSocket();
InetAddress IPAd = InetAddress.getByName("localhost");
byte [] sendData1 = new byte[1024];
byte [] sendData2 = new byte[1024];
byte [] receiveData = new byte [1024];
String input = "";
Scanner in = new Scanner (System.in);
System.out.println("Enter word: ");
input = in.nextLine();
String [] splitWord = input.split("");
int length = splitWord.length;
int evenSplit = 0;
int oddSplit = 0;
String firstHalf = "";
String secondHalf = "";
if (length%2==0)
{
evenSplit = length / 2;
for (int i=0; i<evenSplit; i )
firstHalf = splitWord[i];
for (int i=evenSplit; i<length;i )
secondHalf = splitWord[i];
}
else{
oddSplit = (length 1)/2;
for (int i=0; i<oddSplit;i )
firstHalf = splitWord[i];
for (int i=oddSplit; i<length;i )
secondHalf = splitWord[i];
}
sendData1 = firstHalf.getBytes();
sendData2 = secondHalf.getBytes();
DatagramPacket sendPacket1 = new DatagramPacket (sendData1,
sendData1.length, IPAd, 2000);
DatagramPacket sendPacket2 = new DatagramPacket (sendData2,
sendData2.length, IPAd, 2000);
client.send(sendPacket1);
client.send(sendPacket2);
DatagramPacket receivePacket = new DatagramPacket (receiveData,
receiveData.length);
String serverReply = new String (receivePacket.getData());
System.out.println ("From server: " serverReply);
client.close();
}
}
Серверный код:
import java.io.*;
import java.net.*;
public class UDPServer
{
public static void main (String [] args) throws Exception
{
DatagramSocket server = new DatagramSocket (2000);
byte [] receiveData1 = new byte[1024];
byte [] receiveData2 = new byte[1024];
byte [] sendData = new byte [1024];
while (true)
{
DatagramPacket receivePacket1 = new DatagramPacket
(receiveData1, receiveData1.length);
server.receive(receivePacket1);
DatagramPacket receivePacket2 = new DatagramPacket
(receiveData2, receiveData2.length);
server.receive(receivePacket2);
String firstHalfWord = new String (receivePacket1.getData());
String secondHalfWord = new String (receivePacket2.getData());
InetAddress IPAd = receivePacket1.getAddress();
int port = receivePacket1.getPort();
String response = secondHalfWord firstHalfWord;
sendData = response.getBytes();
DatagramPacket sendPacket = new DatagramPacket (sendData,
sendData.length, IPAd, port);
server.send(sendPacket);
}
}
}
Если я набираю hello, это означает, что нужно ответить с помощью lohel (hel lo задом наперед)
он просто возвращается с «From server:» без какого-либо строкового ответа.
Ответ №1:
Перед строкой String serverReply = new String(receivePacket.getData());
вам нужно сказать client.receive(receivePacket);