Mam problem z przesłaniem tablicy bajtów lokalnie z klienta do serwera przy użyciu ByteArrayInput(Output)Stream. Wydaje mi się, że źle odczytuję to co wysyłam. Poniżej kawałek kodu z serwera, który wysyła dane do klienta (wycięte niektóre try, catch itd):
gniazdo = new ServerSocket(4444);
polaczenie = gniazdo.accept();
wy = polaczenie.getOutputStream();
if(wy != null)
{
zapis = new ByteArrayOutputStream();
}
System.out.println("Próba wysyłania...");
try
{
if(zapis != null)
{
String str = "napis";
byte[] byte_arr = str.getBytes();
zapis.write(byte_arr);
System.out.println("String do wysłania:"+str);
System.out.println("Tablica do wysłania:");
for(int k=0;k<byte_arr.length;k++)
{
System.out.println(byte_arr[k]);
}
}
}
Wynik działania:
Próba wysyłania...
String do wysłania:napis
Tablica do wysłania:
110
97
112
105
115
Kawałek kodu klienta odbierającego dane (wycięte niektóre try, catch itd):
Socket gniazdo = null;
InputStream we = null;
ByteArrayInputStream odczyt = null;
gniazdo = new Socket("localhost",4444);
System.out.println("Klient połączony:"+gniazdo.isConnected());
we = gniazdo.getInputStream();
try
{
if(we!=null)
{
System.out.println("we avaible: "+we.available());
byte[] buf = new byte[5];
odczyt = new ByteArrayInputStream(buf);
}
}
try
{
if(odczyt.available() > 0)
{
System.out.println("Odczyt avaible: "+odczyt.available());
int i = -1;
byte[] cbuf = new byte[odczyt.available()];
i = odczyt.read(cbuf);
String str = new String(cbuf);
if(i!=-1)
{
System.out.println("Bajty: "+i+" Informacja z serwera: "+str);
}
System.out.println("Bajty z tablicy:");
for(int k=0;k<cbuf.length;k++)
{
System.out.println(cbuf[k]);
}
}
Wynik działania klienta:
Klient połączony:true
we avaible: 0
Odczyt avaible: 5
Bajty: 5 Informacja z serwera:
Czy ktoś wie czemu nic nie zostało odebrane? Czy to dlatego, że metoda avaible() dla inputStream zwraca 0? Jeśli tak to dlaczego ona zwraca 0?
EDIT: Wynik polecenia netstal -tln po uruchomieniu programu serwera:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN
tcp6 0 0 :::139 :::* LISTEN
tcp6 0 0 :::4444 :::* LISTEN
tcp6 0 0 ::1:52989 :::* LISTEN
tcp6 0 0 :::445 :::* LISTEN