Я написал программу отправки сообщений клиент-сервер с использованием сокетов в Java, которая работает нормально, но если длина строки предыдущего сообщения больше, чем текущая in.read(b5)
, строковое сообщение печатается с предыдущим сообщением добавлены символы. Эта проблема связана с предыдущими сохраненными символами в массиве байтов.ПРОГРАММИРОВАНИЕ КЛЕТОК-СЕРВЕРОВ Socket
Как очистить массив байтов для каждого цикла? Как я могу это решить?
код КЛИЕНТ:
try
{
String add=args[0];
int port=Integer.parseInt(args[1]);
Socket s=new Socket(add,port);
OutputStream out=s.getOutputStream();
InputStream in=s.getInputStream();
BufferedReader bufIn = new BufferedReader(new InputStreamReader(in));
BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(out));
byte b1[]=new byte[100];
byte b2[]=new byte[100];
while(true)//infinite loop
{
System.out.println("To Server:");
System.in.read(b1); //reading from keyboard
out.write(b1); //writing to server
in.read(b2); //reading from server
String s1=new String(b2);
String s2=s1.trim();
System.out.println("From Server:"+s2);
}
}
catch (Exception e)
{
System.err.println(e);
}
SERVER код:
try
{
int port=Integer.parseInt(args[0]);
ServerSocket ss=new ServerSocket(port);
while(true) //this loop for diff. no. of clients
{
Socket s=ss.accept();
InputStream in=s.getInputStream();
OutputStream out=s.getOutputStream();
byte b1[]=new byte[100];
byte b2[]=new byte[100];
while(true) //this loop for one client diff. no. of times.
{
in.read(b1);
String s1=new String(b1);
String s2=s1.trim();
System.out.println("From Client:"+s2);
System.out.print("To Client:");
System.in.read(b2);
out.write(b2);
}
}
}
catch (Exception e)
{
System.err.println(e);
}
Чтобы удалить b2 перед вызовом read, возможно, 'Arrays.fill (b2, 0);' Как вы обозначаете пустые символы? –
i добавил Arrays.fill (b2,0); но получил метод fill not found error ... Я думаю, b2 должен быть байтовым массивом ri8 ?? @JerryJeremiah – user3021254