nuubik Ierakstīts Novembris 7, 2011 Share Ierakstīts Novembris 7, 2011 (labots) Tātad, man ir udevums, izmantojot internetu( kodus var meklēt arī internetā ) atrast un izpidīt sekojošu uzdevumu: Jāizveido čats, klients-servers programmu. Nepieciešams čatošanas rezultātus saglabāt failā/os (logošana) servera pusē. Programmu esmu atradis un pārbaudījis tās darbību, vienīgā problēma ir tāda, ka es nekādīgi nespēju izveidot operāciju, lai visu čatošanu programma saglabātu failā (os (logošana) servera pusē). Varbūt kāds varētu palīdzēt šajā sakarā? Kodi : Servera kods - package multithreadchatserver; import java.io.*; import java.net.*; public class MultiThreadChatServer{ static Socket clientSocket = null; static ServerSocket serverSocket = null; static clientThread t[] = new clientThread[10]; public static void main(String args[]) { int port_number=2222; if (args.length < 1) { System.out.println("Usage: java MultiThreadChatServer \n"+ "Now using port number="+port_number); } else { port_number=Integer.valueOf(args[0]).intValue(); } try { serverSocket = new ServerSocket(port_number); } catch (IOException e) {System.out.println(e);} while(true){ try { clientSocket = serverSocket.accept(); for(int i=0; i<=9; i++){ if(t[i]==null) { (t[i] = new clientThread(clientSocket,t)).start(); break; } } } catch (IOException e) { System.out.println(e);} } } } class clientThread extends Thread{ DataInputStream is = null; PrintStream os = null; Socket clientSocket = null; clientThread t[]; public clientThread(Socket clientSocket, clientThread[] t){ this.clientSocket=clientSocket; this.t=t; } public void run() { String line; String name; try{ is = new DataInputStream(clientSocket.getInputStream()); os = new PrintStream(clientSocket.getOutputStream()); os.println("Enter your name."); name = is.readLine(); os.println("Hello "+name+" to our chat room.\nTo leave enter /quit in a new line"); for(int i=0; i<=9; i++) if (t[i]!=null && t[i]!=this) t[i].os.println("*** A new user "+name+" entered the chat room !!! ***" ); while (true) { line = is.readLine(); if(line.startsWith("/quit")) break; for(int i=0; i<=9; i++) if (t[i]!=null) t[i].os.println("<"+name+"> "+line); } for(int i=0; i<=9; i++) if (t[i]!=null && t[i]!=this) t[i].os.println("*** The user "+name+" is leaving the chat room !!! ***" ); os.println("*** Bye "+name+" ***"); for(int i=0; i<=9; i++) if (t[i]==this) t[i]=null; is.close(); os.close(); clientSocket.close(); } catch(IOException e){}; } } Klienta kods: package multithreadchatclient; import java.io.*; import java.net.*; public class MultiThreadChatClient implements Runnable{ static Socket clientSocket = null; static PrintStream os = null; static DataInputStream is = null; static BufferedReader inputLine = null; static boolean closed = false; public static void main(String[] args) { int port_number=2222; String host="localhost"; if (args.length < 2) { System.out.println("Usage: java MultiThreadChatClient \n"+ "Now using host="+host+", port_number="+port_number); } else { host=args[0]; port_number=Integer.valueOf(args[1]).intValue(); } try { clientSocket = new Socket(host, port_number); inputLine = new BufferedReader(new InputStreamReader(System.in)); os = new PrintStream(clientSocket.getOutputStream()); is = new DataInputStream(clientSocket.getInputStream()); } catch (UnknownHostException e) { System.err.println("Don't know about host "+host); } catch (IOException e) { System.err.println("Couldn't get I/O for the connection to the host "+host); } if (clientSocket != null && os != null && is != null) { try { new Thread(new MultiThreadChatClient()).start(); while (!closed) { os.println(inputLine.readLine()); } os.close(); is.close(); clientSocket.close(); } catch (IOException e) { System.err.println("IOException: " + e); } } } public void run() { String responseLine; try{ while ((responseLine = is.readLine()) != null) { System.out.println(responseLine); if (responseLine.indexOf("*** Bye") != -1) break; } closed=true; } catch (IOException e) { System.err.println("IOException: " + e); } } } Labots Novembris 7, 2011 - nuubik Link to comment Share on other sites More sharing options...
ķeblis Novembris 7, 2011 Share Novembris 7, 2011 AutoIT ir feina programiņa kas tev ļaus izveidot Windows skriptus kā programmiņas (tu uzraksti relatīvi vienkāršus skriptus un softs izdarīs visu compiling utt kā rezultātā tev nevajag zināt C# vai C++) Re kur links uz mājaslapu - http://www.autoitscript.com/ Es šo figņu personīgi biju lietojis, lai konkrēti automatizētu pāris excel failu pārkopēšanu un arhivēšanu, bet konkrēti ir arī iespēja izveidot Log failus pie kā šobrīd darbojos, lai ieviestu gadījumiem, ja kkas noiet greizi. Link to comment Share on other sites More sharing options...
usver Novembris 7, 2011 Share Novembris 7, 2011 autoram derētu vispirms saprast, kas tur notiek, kas tie par thread`iem un kur vispār notiek kāda darbība. Un loģiski padomājot, pievienot to 1 rindu, lai visas darbības logotos. Intereses pēc - kas tā ir par koledžu, kur atbalsta IT speciālistu augšanu, "ar interneta kodiem"? Par AutoIt - šajā gadījumā tikpat noderīgs kā Winamp. Link to comment Share on other sites More sharing options...
Maris_O Novembris 7, 2011 Share Novembris 7, 2011 Vienkārši - pēc šīs rindiņas line = is.readLine(); saglabā (append) line iekš faila. Labāks variants ir uzrakstīt atsevišķu thread, kas to dara. Intereses pēc - kas tā ir par koledžu, kur atbalsta IT speciālistu augšanu, "ar interneta kodiem"? LOL, tas kods ir kautkur atrasts ! Man jau likās savādi, ka cilvēks, kas var uzrakstīt to kodu, nespēj pievienot logging. Link to comment Share on other sites More sharing options...
ķeblis Novembris 7, 2011 Share Novembris 7, 2011 (labots) autoram derētu vispirms saprast, kas tur notiek, kas tie par thread`iem un kur vispār notiek kāda darbība. Un loģiski padomājot, pievienot to 1 rindu, lai visas darbības logotos. Intereses pēc - kas tā ir par koledžu, kur atbalsta IT speciālistu augšanu, "ar interneta kodiem"? Par AutoIt - šajā gadījumā tikpat noderīgs kā Winamp. Lasīju cilvēkam grūtības sagādā Javā pievienot logging opciju, Java nekad neesmu bakstījis, tādēļ iedevo pašu vienkāršāko alternatīvu ... nosūti info ko tu vēlies logot uz AutoIt skriptu kas tālāk nodarbojas ar to logošanu ... Jā nav tas efektīvākais, vai labākais vaiants, bet toties tas vismaz ir kas vairāk par nekādu variantu. EDIT: Man gan radās jautājums šo rakstot .... kā/kur paredzēts integrēt šo Java kodu? Mans piedāvātais variants ir pilnīgs fufelis gadījumā, ja skripts tiek integrēts attālināti hostētā serverī pie kā nav pieeja pieslēgties caur nekādu Remote Desktop Labots Novembris 7, 2011 - K.Kavacis Link to comment Share on other sites More sharing options...
usver Novembris 7, 2011 Share Novembris 7, 2011 šis ir tipisks studenta jautājums "nokačāju kodu no 11 gadus vecas lapas http://www.ase.md/~aursu/ClientServerThreads.html vai kāda saita, kurš to ir pārpublicējis vēlākos gados un pievienojis pakotnes nosaukumu". Lai nodotu pasniedzējam, kurš noliks kaudzītē un ieliks ķeksīti, ka praktiskais darbs veiksmīgi izdarīts. Man tikai interesē, kas tā ir par mācību iestādi? Tīri interesei. Latvijā ir parādījusies kāda Turības tipa mācību iestāde, kur IT darbiniekus sagatavo un ļauj paķēpāties, vienalga ar ko, lai skaitītos "iepazinušies ar sfēru"? Link to comment Share on other sites More sharing options...
Maris_O Novembris 7, 2011 Share Novembris 7, 2011 ... nosūti info ko tu vēlies logot uz AutoIt skriptu kas tālāk nodarbojas ar to logošanu ... Jā nav tas efektīvākais Nelien diskusijās, par kurām tev nav pilnīgi nekādas sapratnes. Kāds vēl te fuck1ng skripts vajadzīgs ? Link to comment Share on other sites More sharing options...
ķeblis Novembris 7, 2011 Share Novembris 7, 2011 Nelien diskusijās, par kurām tev nav pilnīgi nekādas sapratnes. Kāds vēl te fuck1ng skripts vajadzīgs ? Jo Javu neuzskatu par programmēšanas valodu tā pat kā mājaslapu veidotājus neviens nesauc par datorprogrammētājiem tā vien tāda skriptošana ir, tādēļ to tā arī saucu - par skriptošanu Link to comment Share on other sites More sharing options...
Maris_O Novembris 7, 2011 Share Novembris 7, 2011 man liekas, ka tu domā java script, par ko šeit neiet runa 1 Link to comment Share on other sites More sharing options...
nuubik Novembris 7, 2011 Author Share Novembris 7, 2011 Vienkārši - pēc šīs rindiņas line = is.readLine(); saglabā (append) line iekš faila. Labāks variants ir uzrakstīt atsevišķu thread, kas to dara. LOL, tas kods ir kautkur atrasts ! Man jau likās savādi, ka cilvēks, kas var uzrakstīt to kodu, nespēj pievienot logging. Mēģināju gan šādi : BufferedWriter out = new BufferedWriter(new FileWriter("test.txt")); out.write("line"); out.newLine(); Gan šādi: try { BufferedWriter out = new BufferedWriter(new FileWriter("test.txt")); out.write("line"); out.newLine(); } catch (IOException e) { System.out.println("Exception "); } Abos gadījumos izveidojās txt fails, bet nekas netika saglabāts(logošanai bija jābūt servera pusē) Runājot par to skolu padarīšanu, manuprāt nav tīri normāli mācīt cilvēkiem, kuriem vispār nav nekad bijusi saskare ar javu tikai vienu semestri šo priekšmetu + neskatoties uz nekādām zināšanām vispār , sākt mācīt javu ar dažādu spēļu u.t.t izveidi, nevis elementāriem pamatiem. Link to comment Share on other sites More sharing options...
Mezavecis Novembris 7, 2011 Share Novembris 7, 2011 No kāda cauruma izlīdi, ka izsaki šādus apgalvojumus? Tak palasi, kas vispār Java tāda ir. http://en.wikipedia.org/wiki/Java_%28programming_language%29 Jo Javu neuzskatu par programmēšanas valodu tā pat kā mājaslapu veidotājus neviens nesauc par datorprogrammētājiem tā vien tāda skriptošana ir, tādēļ to tā arī saucu - par skriptošanu 1 Link to comment Share on other sites More sharing options...
usver Novembris 7, 2011 Share Novembris 7, 2011 (labots) autor: pēc visām tām darbībām .write() un .newLine() izpildi arī out.flush(); tas izgāž failā visu, kas sakrājies. Labots Novembris 7, 2011 - usver Link to comment Share on other sites More sharing options...
Maris_O Novembris 7, 2011 Share Novembris 7, 2011 (labots) out.write(line); out.flush(); out.close(); Labots Novembris 7, 2011 - Maris_O Link to comment Share on other sites More sharing options...
nuubik Novembris 7, 2011 Author Share Novembris 7, 2011 autor: pēc visām tām darbībām .write() un .newLine() izpildi arī tas izgāž failā visu, kas sakrājies. Tagad kkas sāk sanākt, tikai baigi dīvaini, ka vinsh izvada tikai pēdējo ko esmu uzrakstijis, respektiivi, /quit , lai iziet no chata Link to comment Share on other sites More sharing options...
usver Novembris 7, 2011 Share Novembris 7, 2011 pēc Maris_O norādēm raksti - rindiņas, kas darbojas ar "out" cieši klāt, neaizmirstot arī ".close()". ja neizdodas- iepeisto, kuru vietu un uz ko esi mainījis. Link to comment Share on other sites More sharing options...
nuubik Novembris 7, 2011 Author Share Novembris 7, 2011 (labots) pēc Maris_O norādēm raksti - rindiņas, kas darbojas ar "out" cieši klāt, neaizmirstot arī ".close()". ja neizdodas- iepeisto, kuru vietu un uz ko esi mainījis. Ievietoju: BufferedWriter out = new BufferedWriter(new FileWriter("test.txt")); out.write(line); out.flush(); out.close(); Uzreiz zem rindiņas line = is.readLine(); - taču vienīgais ko programma ieraksta failā ir /quit , jeb pēdējā komanda ko es uzrakstu, lai pamestu čatu Labots: Sapratu to, ka programma saglaba teksta failā principā to, ko es pēdējo uzrakstu vispār, nevis ņem no sakuma un turpina rakstīt failā visu ko raksta, bet pie jebkuras palaišanas tikai pēdējo uzrakstīto saglabā Labots Novembris 7, 2011 - nuubik Link to comment Share on other sites More sharing options...
usver Novembris 7, 2011 Share Novembris 7, 2011 BufferedWriter out = new BufferedWriter(new FileWriter("test.txt", true)); no references: FileWriter(String fileName, boolean append) Constructs a FileWriter object given a file name with a boolean indicating whether or not to append the data written. Link to comment Share on other sites More sharing options...
nuubik Novembris 7, 2011 Author Share Novembris 7, 2011 BufferedWriter out = new BufferedWriter(new FileWriter("test.txt", true)); no references: FileWriter(String fileName, boolean append) Constructs a FileWriter object given a file name with a boolean indicating whether or not to append the data written. Paldies, tagad visu logo, bet man radās jautājums, vai šeit arī pastāv iespēja, izmantojot /n sadalīt to visu rindiņās, lai būtu labāk parskatāms? Link to comment Share on other sites More sharing options...
usver Novembris 7, 2011 Share Novembris 7, 2011 sadalīt pa rindiņām var out.write(line); out.write('\n'); out.write('\t'); out.write("atkāpe"); out.write('\t'); out.write("vēl pēc atkāpes"); out.flush(); out.close(); vai vienkārši out.write(line); out.write('\n' + '\t' + "atkāpe" + '\t' + "vēl pēc atkāpes"); out.flush(); out.close(); tātad - specsimboli (\n, \t, utt ) apostrofos, bet stingi - pēdiņās. Link to comment Share on other sites More sharing options...
ķeblis Novembris 8, 2011 Share Novembris 8, 2011 No kāda cauruma izlīdi, ka izsaki šādus apgalvojumus? Tak palasi, kas vispār Java tāda ir. http://en.wikipedia....ing_language%29 Zinu kas ir Java, es tikai izsaku savu viedokli par to Link to comment Share on other sites More sharing options...
japets Novembris 8, 2011 Share Novembris 8, 2011 (labots) ...tā vien tāda skriptošana ir... Nē, Tu nezinu ne sūda. Un iepriekš rakstītais vedina domāt, ka tāpat, kā daudzi citi iesācēji, Tu Javu jauc ar Javascriptu. (Pie kam arī Javascript ir Tjuring complete!) Edit. Ļoti atvainojos par šo offtopic. Labots Novembris 8, 2011 - japets Link to comment Share on other sites More sharing options...
Recommended Posts
Izveido kontu, vai pieraksties esošajā, lai komentētu
Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas
Izveidot jaunu kontu
Piereģistrējies un izveido jaunu kontu, tas būs viegli!
Reģistrēt jaunu kontuPierakstīties
Jums jau ir konts? Pierakstieties tajā šeit!
Pierakstīties tagad!