Hirdetés
- Fórumok
- Szoftverfejlesztés
- Java programozás
- (kiemelt téma)
- Gaming notebook topik
- Végre feketében pózol a Noctua legkomolyabb 120 mm-es ventilátora
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- VR topik
- Milyen videókártyát?
- Milyen ÚJ notebookot vegyek?
- Nem indul és mi a baja a gépemnek topik
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Apple MacBook
- Amlogic S905, S912 processzoros készülékek
-
Fórumok
PROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Tabletek, E-bookok Nyomtatók, szkennerek PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokMobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokLOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
Új hozzászólás Aktív témák
-
Atapi
senior tag
Köszönöm, de sajnos így sem megy át semmi, viszont most a neten találtam egy másik módszert:
Server:
package serverkliens;
import java.io.DataInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class FileServer extends Thread {
private ServerSocket ss;
public FileServer(int port) {
try {
ss = new ServerSocket(port);
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
while (true) {
try {
Socket clientSock = ss.accept();
saveFile(clientSock);
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void saveFile(Socket clientSock) throws IOException {
DataInputStream dis = new DataInputStream(clientSock.getInputStream());
FileOutputStream fos = new FileOutputStream("F:/zene.mp3");
byte[] buffer = new byte[12 * 4096];
int filesize = 15123; // Send file size in separate msg
int read = 0;
int totalRead = 0;
int remaining = filesize;
while((read = dis.read(buffer, 0, Math.min(buffer.length, remaining))) > 0) {
totalRead += read;
remaining -= read;
System.out.println("read " + totalRead + " bytes.");
fos.write(buffer, 0, read);
}
fos.close();
dis.close();
}
public static void main(String[] args) {
FileServer fs = new FileServer(1988);
fs.start();
}
}Kliens:
package serverkliens;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.Socket;
public class FileClient {
private Socket s;
public FileClient(String host, int port, String file) {
try {
s = new Socket(host, port);
sendFile(file);
} catch (Exception e) {
e.printStackTrace();
}
}
public void sendFile(String file) throws IOException {
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[12 * 4096];
int read;
while ((read = fis.read(buffer)) > 0) {
dos.write(buffer, 0, read);
}
fis.close();
dos.close();
}
public static void main(String[] args) {
FileClient fc = new FileClient("localhost", 1988, "/Users/Valaki/Music/Zene/Aya Nakamura - Copines.mp3");
}
}Itt már jól működik a fájlátvitel mondjuk txt fájl esetén, viszont amint mp3-at adok meg neki akkor kb 15kb-ot átvisz és kapok egy ilyen üzenetet:
java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)Ebben látsz valami hibát ?
mi lehet a gondja?

int filesize = 15123; --> ~15KB
ebből számolod, hogy mennyit kell még fogadnod, ezért a szerver hamarabb megszakítja a fogadást, mint hogy a küldő a végére érne. -
Atapi
senior tag
még egy dolog eszembe jutott.
Ez a legjobb szerintem.do{
valasz = beolvas.readLine();
szamCimekClient.add(valasz);
System.out.println(valasz);
System.out.println(szamCimekClient.size());
} while (valasz != null);
Egyet értesz?Illetve az miért lehet hogy innen nem megy tovább a program? Mondjuk ha beírok egy kiíratást a ciklus után akkor azt nem írja már ki.

én nem látom indokoltnak do-while használatát (akkor használod, ha valamit legalább egyszer szeretnél megcsinálni, de bizonyos feltétel esetén folytatod is. de te miért akarnál egyáltalán belépni a ciklusba, ha a beolvasásod null?).
emellett a jelenlegi struktúrában a ciklus elején beolvasol, ami ha null érték, azt még megpróbálod feldolgozni, amit szerintem nem szeretnél (ez okozhatja is az újabb gondodat), de ebben tévedhetek. -
Atapi
senior tag
így az első beolvasást nem fogod kiírni. (a változó frissítése a felhasználása után kellene, hogy történjen.) btw, csinálhatod így is:
String valasz;
while ((valasz = beolvas.readLine()) != null) {
System.out.println(valasz);
} -
Atapi
senior tag
Server küldés:
try {
PrintWriter kuldes = new PrintWriter(beerkezoKliens.getOutputStream(), true);
for (int i = 0; i < szamCimek.size(); i++) {
kuldes.println(szamCimek.get(i));
}
} catch (IOException ex) {
System.out.println("Nem kuldott semmit");
}Kliens:
BufferedReader beolvas = new BufferedReader(new InputStreamReader(s.getInputStream()));
String valasz = beolvas.readLine();
while (valasz != null) {
System.out.println(valasz);
}
}mi lehet a gond?
nem frissíted a valasz változó értékét a while cikluson belül. a beolvas.readLine() minden ismétlésnél le kéne, hogy fusson, de most csak egyszer fut le, amikor inicializálod vele a változót.
-
Atapi
senior tag
Azért kell példányosítani, mert a main metódus nem része az osztálynak.
szvsz inkább azért kell példányosítani, mert nem csak osztályszintű metódusokhoz és változókhoz szeretne hozzáférni (prrint(), tandij). Példányváltozója pedig egy adott példánynak van (aka objektum állapot), illetve példány metódust is csak adott példányon lehet meghívni (aka objektum állapot változás, viselkedés). Ha csak az alapTandij értékéhez szeretne hozzáférni, akkor nincs szükség példányosításra, mivel az static (osztályszintű).
a main helye ebből a szempontból szerintem irreleváns, jogosultsági kérdések esetén lenne jelentősége. -
Atapi
senior tag
Sziasztok!
A lenti kódban ezt a sort nem értem:
String prevvalue=(String)newmap.put(3,"is great");Tudnátok segíteni az értelmezésében? köszönöm
Ez: newmap.put(3,"is great") --> Beleteszi a 3. helyre az "is great" stringet. Ez eddig világos.
De nem értem, hogy miért kell előtte (String) castolni és azt sem értem, hogy prevvalue értéke miért nem az újonnan berakott érték, azaz "is great" string lesz?Kódrészlet:
public class HashMapDemo {
public static void main(String args[]) {
// create hash map
HashMap newmap = new HashMap();
// populate hash map
newmap.put(1, "tutorials");
newmap.put(2, "point");
newmap.put(3, "is best");System.out.println("Map value before change: "+ newmap);
// put new values at key 3
String prevvalue=(String)newmap.put(3,"is great");// check returned previous value
System.out.println("Returned previous value: "+ prevvalue);System.out.println("Map value after change: "+ newmap);
}
}Futási eredmény:
Map value before change: {1=tutorials, 2=point, 3=is best}
Returned previous value: is best
Map value after change: {1=tutorials, 2=point, 3=is great}"Ez: newmap.put(3,"is great") --> Beleteszi a 3. helyre az "is great" stringet."
lehet, hogy csak nem figyeltél a megfogalmazásra, de ez az állítás nem igaz. a map kulcs-érték párokat tárol, az elemeknek nincs rögzített helye (mint pl egy List esetén az x. elem), legalábbis a hashmap rendezetlen, így nincs garancia arra, hogy mi hova kerül, csak az garantált, hogy egy kulcshoz egy adott érték tartozik, és a kulcs alapján ezt az értéket kapod vissza. ez azt jelenti, hogy nem a 3. helyre helyezed a példában a sringet, hanem a 3 kulcshoz rendeled hozzá. a példa szerencsétlen abból a szempontból, hogy kiíratásnál a természetes sorrend érvényesül, azaz növekvő sorrendben kerülnek kiírásra a kulcs-elem párok, de ez nem mindig van így, nem lehet rá számítani. lehet, hogy most feleslegesen téptem a billentyűzetem és tudod ezeket, de a megfogalmazásod nem ezt sugallta.
-
Atapi
senior tag
Ja értem.
Hát ez egy olyan alkalmazás lesz, ami PC-Desktopon és Androidon is működik. Egy kliens alkalmazás, ami JSON adatokat kap és azokat dolgozza fel. Ha a User szeretné, akkor el is mentheti és törölheti őket. Ennyi a fájlművelet.
A folyamatos figyelést azért akarom a mappára beüzemelni, mert Mi van akkor, ha az alkalmazásban épp kilistázta a USER az elmentett fájlokat, azaz a mappa tartalmát és egy külön ablakban pl. TotalCommanderben kitöröl egy fájlt? Így ha olyan fájlt akar betölteni, ami nincs ott, akkor leállna.
Ezzel kapcsolatban van tapasztalatotok?
"ha olyan fájlt akar betölteni, ami nincs ott, akkor leállna"
nem értem, hogy ez a rész sima kivételkezeléssel miért nem oldható fel. ha nem nyitható meg a megadott fájl, akkor hibaüzenet, frissítés, aztán az élet megy tovább. ráadásul a fájlkezelő (i/o) műveletek ha jól emlékszem eleve ellenőrzött kivételt dobnak, szóval amúgy is illene lekezelned az ilyen hibákat (pl attól, hogy ott van egy fájl, még nem biztos, hogy meg tudod nyitni, jogosultság, hw, vagy akármilyen hiba miatt. ilyenkor sem illik összeroskadnia a programnak).
-
Atapi
senior tag
Hi!
Segítségeteket szeretnem kerni. Ismét egy rookie feladattal fárasztanálak benneteket
. Osztálytömb lenne a téma, kicsit belezavarodtam.
A lényeg röviden. Egy külön osztályban le kellett kepézni az éttermeket nevük, és kapacitásuk (tömbben asztalonként) szerint. Továbbá egy metódussal összesíteni az elérhető helyek számat, valamint egy másikkal stringbe rakni az eredményt.Nálam eddig ez így nézne ki:
public class Restaurant{
private int[] a;
private String e;
public Restaurant (String name, int[] seats){
e = name;
a = seats;
}
public int getTotalSeats (){
int x = 0;
for (int i = 0, i < a.length, i++){
x = x + a[i];
}
return x;
}
public String toString (){
String text;
text = e + ": " + getTotalSeats() + " Places";
return text;
}
}A követekéző lepésben a nyolcas sort metódusával összkapacitás alapján, csökkenő sorrendbe kéne őket rendezni.
Ha minden passzolna, akkor a feladat által megadott főmetódus kidobna az eredményt.
public class nyolcas{
public static void sort (Restaurant[] restaurants){
int max, w;
for (int i = 0; i < restaurants.length - 1; i++){
max = i;
for (int j = i+1; j < restaurants.length; j++){
if (restaurant[j].getTotalSeats() > restaurant[max].getTotalSeats())
max = j;
}
w = restaurants[max];
restaurants[max] = restaurants[i];
restaurants[i]= w;
}
}
public static void main(String[] args){
Restaurant r1 = new Restaurant ("A", new int[] {4, 10, 5, 6, 4});
Restaurant[] restaurants =
{ r1,
new Restaurant ("B", new int[] {5, 3, 1}),
new Restaurant ("C", new int[] {6, 4, 2}),
new Restaurant ("D", new int[] {7, 5, 3})
};
sort (restaurants);
for (Restaurant r: restaurants)
System.out.println (r);
}
}Sajnos nem eszi meg, pls help.
én három hibát találtam:
- egy for ciklusban pontosvessző helyett sima vesszőt használtál
- a restaurants tömbneved végéről több helyen lehagytad a záró s-t
- w nem int tipusu, hanem Restaurant
Új hozzászólás Aktív témák
-
Fórumok
PROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Tabletek, E-bookok Nyomtatók, szkennerek PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokMobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokLOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
- Fórumok
- Szoftverfejlesztés
- Java programozás
- (kiemelt téma)
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- Gurulunk, WAZE?!
- Yettel topik
- Hálózati / IP kamera
- Archttila: SMART tesztelés automatizálva: smartctl poller script Zsh-ban, RPi-re
- Gaming notebook topik
- Végre feketében pózol a Noctua legkomolyabb 120 mm-es ventilátora
- Milyen okostelefont vegyek?
- Építő/felújító topik
- Mi csak nyerhetünk a fokozódó űrinternet versenyben
- Xiaomi 14 - párátlanul jó lehetne
- További aktív témák...
- Hihetetlen Gaming PC brutális specifikációkkal! A dán Topdata.dk IT-cég által összerakva
- 2.5" 100% noti HDD-k Western Digital, Seagate 320Gb (3k) +1Tb (15k) van 1db SSHD is (15k)
- Lenovo P16s gen2 16" //Core i7 1360P // Nvidia RTX A500 4GB GDDR6 // 16Gb /512GB SSD/ gyári garancia
- Micron és Samsung 32GB ram 1 x 32GB 3200Mhz vagy 2 x 16GB 2666Mhz - több db elérhető
- Lenovo M720q Mini PC - Core i3 8100T vagy Core i5 8500T- 8GB vagy 16GB ram - 256/512GB SSD - több db
- Tablet felvásárlás!! Samsung Galaxy Tab A8, Samsung Galaxy Tab A9, Samsung Galaxy Tab S6 Lite
- Azonnali készpénzes GAMER / üzleti notebook felvásárlás személyesen / csomagküldéssel korrekt áron
- Honor X8a 128GB, Kártyafüggetlen, 1 Év Garanciával
- ÁRGARANCIA! Épített KomPhone i5 12400F 16/32/64GB RAM RX 9060 XT 16GB GAMER PC termékbeszámítással
- Azonnali készpénzes Sony Playstation 4 Slim / PS4 Pro felvásárlás személyesen/csomagküldéssel
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
mi lehet a gondja?
. Osztálytömb lenne a téma, kicsit belezavarodtam.

