Contoh ini membagikan kode implementasi spesifik untuk membaca login pengguna dan mengunggah server untuk referensi Anda. Konten spesifiknya adalah sebagai berikut
Klien berjalan di server yang menyediakan layanan UNIX kepada pengguna. Digunakan untuk membaca dan mengumpulkan informasi hulu dan hilir pengguna di server, berpasangan dan mengaturnya, dan kemudian mengirimnya ke server untuk ringkasan.
Kode Implementasi Khusus:
1. DMSServer.java
paket com.dms; impor java.io.bufferedreader; impor java.io.file; impor java.io.fileOutputStream; impor java.io.ioexception; impor impor java.io.inputStreamReader; impor java.outputStream; java.util.hashmap; impor java.util.list; impor java.util.map; impor java.util.concurrent.blockyqueue; impor java.util.concurrent.executorservice; import java.util.concurrent.executors; impor java.uxuRock.Uckurklent. impor org.dom4j.document; impor org.dom4j.element; impor org.dom4j.io.saxreader; /** * server DMS, digunakan untuk menerima * log pemasangan yang dikirim oleh setiap klien dan menyimpannya dalam file lokal * @Author Administrator * */kelas publik DMSServer {// Definisi Properti // Server Server Private Server yang Digunakan untuk menerima server yang terhubung ke klien; // kumpulan utas yang digunakan untuk mengelola utas yang menangani klien meminta private executorservice threadpool; // Simpan semua file yang dikirim oleh klien untuk memasangkan log private serverLogFile file; // Pesan Antrian BlockingQueue <String> messagequeue = new LinkedBlockingQueue <String> (); DMSServer publik () melempar Exception {try {System.out.println ("Server sedang menginisialisasi ..."); // 1 Parse file konfigurasi server-config.xml peta <string, string> config = loadConfig (); // 2 Inisialisasi Atribut Init (config); System.out.println ("Inisialisasi server selesai ..."); } catch (Exception e) {System.out.println ("Inisialisasi Gagal!"); lempar e; }} / *** Langkah pertama dalam menginisialisasi metode konstruktor adalah untuk menguraikan file konfigurasi* @return Peta yang dikembalikan disimpan di setiap item file konfigurasi, di mana kunci: nama tag,* nilai adalah teks di tengah tag* @throws Exception* / private peta <string, string> loadFig () lemparan {try @throws* / private peta <string, string> loadFig () lemparan {try {throws {throws* / private peta <string, string> loadFig () Throws Exception {TREAD {try {try {tryer {try {peta = sang sang, string, string> loadFig () lemparan {try {try {try {tryer {try {tryer = Dokumen doc = reader.read (file baru ("server-config.xml")); Elemen root = doc.getrooteLement (); Peta <String, String> config = new HashMap <String, String> (); /** Dapatkan semua sub-tag dalam tag <Config> dan simpan nama setiap sub-tag sebagai kunci, dan* teks di tengah adalah nilai dalam koleksi peta*/ daftar <sement> daftar = root.elements (); untuk (elemen e: daftar) {string key = e.getname (); Nilai string = e.gettexttrim (); config.put (tombol, nilai); } return config; } catch (Exception e) {System.out.println ("Uji File Konfigurasi Resolve!"); e.printstacktrace (); lempar e; } } /** * The second step of initializing the constructor method is to initialize the attribute according to the configuration item* @param config * @throws Exception */ private void init(Map<String,String> config) throws Exception{ /* * Initialize the attribute with <logrecfile> in the configuration file: serverLogFile * Initialize the property: threadPool with <threadsum> in the configuration file, where a fixed-size thread pool dibuat. Nilai ini digunakan sebagai jumlah utas kumpulan utas* menginisialisasi properti dengan <serverport> dalam file konfigurasi: server, di sini nilai ini adalah port server server server*/ this.server = server baru (integer.parseint (config.get ("serverport"))))); this.serverLogFile = file baru (config.get ("lOgrecfile")); this.threadpool = executors.newfixedThreadPool (integer.parseint (config.get ("threadsum")))); } /** * Metode untuk mulai bekerja di server * @throws Exception * /public void start () melempar Exception { / * * persyaratan implementasi: * pertama -tama mulai utas secara terpisah untuk menjalankan saveloghandler * Tugas ini adalah menyimpan semua log pasangan * dan kemudian mulai mendengarkan port server loop. Setelah klien terhubung, * instantiate clienthander, dan kemudian serahkan tugas ke kumpulan utas * untuk menetapkan utas untuk menangani interaksi dengan klien. * */ coba {System.out.println ("Server mulai berfungsi ..."); Saveloghandler SLH = SavelogHandler baru (); utas baru (SLH) .start (); while (true) {socket socket = server.accept (); threadpool.execute (klien baru (soket)); }} catch (Exception e) {e.printstacktrace (); lempar e; }} public static void main (string [] args) {coba {dmsserver server = new dmsserver (); server.start (); } catch (Exception e) {System.out.println ("Station gagal memulai server!"); }}} / ** * Utas ini bertanggung jawab untuk mengambil setiap log berpasangan dari antrian pesan, * dan menyimpannya ke dalam file serverLogfile * @Author Administrator * * / kelas pribadi SavelogHandler mengimplementasikan runnable {public void run () {printwriter pw = null; coba {pw = printwriter baru (FileOutputStream baru (ServerLogFile, true)); while (true) {if (messagequeue.size ()> 0) {pw.println (messagequeue.poll ()); } else {pw.flush (); Thread.sleep (500); }}} catch (Exception e) {e.printstacktrace (); } akhirnya {if (pw! = null) {pw.close (); }}}}} / ** * Tangani permintaan klien yang ditentukan * @Author Administrator * * / kelas privat ClientHandler mengimplementasikan runnable {soket soket pribadi; clienthandler publik (soket soket) {this.socket = socket; } public void run () { / * Ide: * Pertama menerima semua log berpasangan yang dikirim oleh klien, * sampai "lebih", lalu simpan ini dipasangkan * log ke file lokal, dan balas ke klien * "ok" * menjalankan langkah: * 1: Buat aliran output melalui soket untuk mengirim respons ke klien * 2: Buat aliran input melalui soket, baca log output melalui soket untuk mengirim respons ke klien * 2: Buat aliran input melalui soket, baca log output melalui soket untuk mengirim respons ke klien * 2: Buat aliran input melalui soket, baca The Logs untuk mengirim klien * klien * 2: Buat aliran input melalui soket, baca The Socket to the The Socket untuk mengirim respons klien * 2: Buat aliran input melalui socket, baca The Logs untuk mengirim respons Klien * adalah string "over". Jika tidak, itu adalah log berpasangan, dan simpan ke file lokal. Jika demikian, * berhenti membaca. * 4: Balas klien "ok" setelah berhasil membaca semua log */ printwriter pw = null; coba {// 1 pw = printwriter baru (outputStreamWriter baru (socket.getoutputStream (), "utf-8")); // 2 bufferedReader BR = BufferedReader baru (inputStreamReader baru (socket.getInputStream (), "UTF-8"))); // 3 pesan string = null; while ((pesan = br.readline ())! = null) {if ("over" .equals (pesan)) {break; } // Tulis log ke file untuk menyimpan messagequeue.offer (pesan); } // 4 pw.println ("ok"); pw.flush (); } catch (Exception e) {E.PrintStackTrace (); pw.println ("error"); pw.flush (); } akhirnya {coba {// Putuskan sambungan dari klien untuk melepaskan sumber daya socket.close (); } catch (ioException e) {e.printstacktrace (); }}}}}}}}}}}} 2. DMSClient.java
paket com.dms; Impor java.io.bufferedReader; impor java.io.file; impor java.io.ioException; impor java.io.inputStreamreader; impor impor java.io.outputStreamwriter; impor java.printwriter; impor java.io.randomaccsfile; impor java. java.util.hashmap; import java.util.list; impor java.util.map; import java.util.map.entry; import java.util.set; impor org.dom4j.document; impor org.dom4j.element; impor org.dom4j.io.saxreader; impor com.dms.bo.logdata; import com.dms.bo.logrec; /*** Klien ini berjalan di server yang menyediakan layanan UNIX kepada pengguna. * Digunakan untuk membaca dan mengumpulkan informasi hulu dan hilir dari pengguna di server, dan * berpasangan dan menyelesaikannya dan mengirimkannya ke server untuk ringkasan. * @Author Administrator * */Kelas Publik DMSClient {// Definisi Atribut // Langkah 1: Parse Properti yang Diperlukan dari Log // File Log Sistem UNIX File Private File Logfile; // simpan file log private log private yang diuraikan; // Bookmark File Private File LastPositionFile; // Jumlah entri untuk setiap parsing log private int batch; // Langkah 2: Pasangkan atribut log // simpan file private logrecfile file; // simpan file private loginlogfile; // Langkah 3: Parse atribut log // Alamat server Private String ServerHost; // server port private int serverport; /*** Metode konstruktor, digunakan untuk menginisialisasi klien* @throws Exception*/public DMSClient () melempar Exception {coba {// 1 Parse file konfigurasi config.xml peta <string, string> config = loadConfig (); // Piling System.out.println (config); // 2 Inisialisasi Atribut Init (config); } catch (Exception e) {System.out.println ("Inisialisasi Gagal!"); lempar e; }} / ** * Inisialisasi langkah kedua dari metode konstruktor, inisialisasi atribut sesuai dengan item konfigurasi * @param config * @throws Exception * / private void init (peta <string, string> config) melempar pengecualian {coba {logfile = file baru (config.get ("logfile")); textLogFile = file baru (config.get ("TextLogFile")); lastpositionFile = file baru (config.get ("lastpositionfile")); batch = integer.parseint (config.get ("batch")); logrecfile = file baru (config.get ("lOgrecfile")); LOGINLOGFILE = file baru (config.get ("LoginLogFile")); serverHost = config.get ("serverHost"); serverport = integer.parseint (config.get ("serverport")); } catch (Exception e) {System.out.println ("Properti Inisialisasi Gagal!"); e.printstacktrace (); lempar e; } } /** * The first step in the initialization of the constructor method is to parse the configuration file* @return The returned Map is saved in each item of the configuration file, where key: the name of the tag, * value is the text in the middle of the tag * @throws Exception */ private Map<String,String> loadConfig() throws Exception{ try { SAXReader reader = new SAXReader(); Dokumen doc = reader.read (file baru ("config.xml")); Elemen root = doc.getrooteLement (); Peta <String, String> config = new HashMap <String, String> (); /** Dapatkan semua sub-tag dalam tag <Config> dan gunakan nama setiap sub-tag sebagai kunci,* di teks tengah disimpan dalam koleksi peta sebagai nilai*/ daftar <sement> daftar = root.elements (); untuk (elemen e: daftar) {string key = e.getname (); Nilai string = e.gettexttrim (); config.put (tombol, nilai); } return config; } catch (Exception e) {System.out.println ("Parse Configuration File Exception!"); e.printstacktrace (); lempar e; }} / *** Metode agar klien mulai bekerja* tiga langkah loop:* 1: parsing log* 2: memasangkan log* 3: Kirim log* / public void start () {parselogs (); Matchlogs (); sendlogs (); // while (true) {// // parse log // if (! parselogs ()) {// lanjutan; //} // // pasang log ///if (! matchlogs ()) {// lanjutkan; //} // kirim log // sendlogs (); // lanjutan; //} // kirim log // sendlogs ();//}}}}} @* Gagal* / private boolean sendlogs () { /** Ide Implementasi:* Baca semua log berpasangan dalam file Logrecfile* dan sambungkan ke server dan kirimkan, jika server* jika Anda menerima semuanya, Anda dapat menghapus file, yang berarti bahwa pengiriman* selesai. * Langkah Implementasi:* 1: File Logrecfile harus ada* 2: Baca dan simpan semua log berpasangan ke dalam koleksi* Tunggu untuk mengirim* 3: Terhubung ke server melalui soket* 4: Buat aliran output* 5: Kirim semua log berpasangan dalam urutan server dalam baris* 6: Kirim satu string "over" untuk menunjukkan bahwa semua log telah dikirimkan* 7: BUKU STRAYA* BACA 8: CREET 8 STREKUT LEACE* OVER "untuk menunjukkan bahwa semua log telah dikirimkan* 7: CREED 2 DEAWET* CREED 8 STREKUT* OVER OVER" untuk menunjukkan bahwa semua log telah dikirimkan 2 telah dikirim* adalah "OK", itu berarti bahwa server normal * telah menerima semua log, dan kemudian file Logrecfile * dapat dihapus dan dikembalikan benar berarti bahwa pengiriman selesai. * */ Soket soket = null; Coba {// 1 if (! LOGRECFILE.EXISTS ()) {System.out.println (Logrecfile+"Tidak ada!"); mengembalikan false; } // 2 Daftar <String> cocok = ioutil.LoadLogrec (Logrecfile); // 3 soket = soket baru (serverhost, serverport); // 4 printwriter pw = printwriter baru (outputStreamWriter baru (socket.getoutputStream (), "utf-8")); // 5 untuk (string log: cocok) {pw.println (log); } // 6 pw.println ("over"); pw.flush (); // 7 BufferedReader BR = BufferedReader baru (inputStreamReader baru (socket.getInputStream (), "UTF-8")); // 8 string response = br.readline (); // 9 if ("OK" .Equals (respons)) {LOGRECFILE.DELETE (); Kembali Benar; } else {System.out.println ("Kirim log gagal!"); mengembalikan false; }} catch (Exception e) {System.out.println ("Kirim log gagal!"); e.printstacktrace (); } akhirnya {if (socket! = null) {coba {socket.close (); } catch (ioException e) {e.printstacktrace (); }} return false; } /*** Langkah 2: Pasangkan log* @return true: berpasangan berhasil* Salah: Pairing Gagal* /Private Boolean Matchlogs () { /** Gagasan Implementasi:* Baca semua log baru yang diuraikan pada langkah pertama dengan login yang berhasil. * Selama Anda dapat menemukan Tipe 8, Anda dapat menemukan log login yang dapat dipasangkan dengan *. * * Langkah Implementasi: * 1: Penilaian yang Diperlukan * 1.1: Apakah ada logrecfile. Jika ada, itu tidak akan lagi * pekerjaan pasangan baru akan dilakukan untuk menghindari ditimpa. * 1.2: File TextLogFile harus ada. * 2: Baca TextLogFile dan baca log dan * ke koleksi. (Beberapa contoh logdata)* 3: Jika ada file loginlogfile, itu berarti* ada log yang tidak berhasil terakhir kali, dan juga dibaca* dan disimpan dalam koleksi yang menunggu untuk dipasangkan bersama* 4: Pekerjaan Pairing dan Menyimpan Log. Login dan Logout * * Di mana tombol: pengguna, PID * Nilai: LogData Instance * 4.4: Melintasi peta logout, dan temukan log login yang sesuai di peta login sesuai dengan kunci * dari setiap log logout, dan * simpan log yang dipasangkan di himpunan log yang dipasangkan. Dan hapus log login di log yang dipasangkan* dari peta login. Dengan cara ini, ** Anda seharusnya tidak memiliki pasangan yang tersisa saat Anda masuk ke peta. * 5: Tulis log berpasangan ke Logrecfile* 6: Tulis semua log tidak berpasangan ke LoginLogFile* 7: Hapus file TextLogFile* 8: Return true, menunjukkan bahwa pasangan selesai**/coba {// 1 //1.1 if (lOgrecfile.exists ()) {return true; } //1.2 if (! TextLogFile.exists ()) {System.out.println (TextLogFile+"Tidak ada!"); mengembalikan false; } // 2 Daftar <GOGData> Daftar = iOutil.LoadLogData (TextLogFile); // 3 if (LOGINLOGFILE.exists ()) {list.addall (ioutil.LoadLogData (LoginLogFile)); } // 4 //4.1 DAFTAR <LOGREC> CATCHES = NEW ARRAYLIST <LOGREC> (); //4.2 Peta <String, LogData> LoginMap = HashMap baru <String, LogData> (); Peta <String, LogData> LogOutMap = HashMap baru <String, LogData> (); //4.3 untuk (logData logData: daftar) {string key = logData.getUser ()+ ","+ logData.getPid (); if (logdata.getType () == logData.type_login) {loginMap.put (tombol, logData); } else if (logdata.getType () == LogData.Type_logout) {logoutmap.put (key, logData); }} //4.4 Set <entry <string, logData >> entryset = logoutmap.entryset (); untuk (entri <string, logData> e: entryset) {logdata logout = e.getValue (); Logdata login = loginMap.remove (e.getKey ()); LOGRREC LOGREC = LOGRREC baru (login, logout); Matches.add (Logrec); } // 5 ioutil.savecollection (kecocokan, logrecfile); // 6 ioutil.savecollection (LoginMap.Values (), LoginLogFile); // 7 TextLogFile.Delete (); // 8 Return true; } catch (Exception e) {System.out.println ("Pairing Log Gagal!"); e.printstacktrace (); } return false; } /** * Step 1: parse the log* @return true: parse successful* false: parse failed*/ private boolean parseLogs(){ /* * Implementation idea: * Loop reading batch logs, then parse * 5 information in each log, and finally form a string, write it to the textLogFile file in * behavior units* * Implementation steps: * 1: Necessary judgment work* 1.1: In order to avoid the parsed log not being used Namun, dan * langkah pertama mengulangi eksekusi, menyebabkan log sebelumnya ditimpa *, Anda perlu menilai di sini. Jika Anda menyimpan log parsed* file log ada, dan langkah pertama tidak akan lagi dieksekusi. * File log ini akan dihapus setelah langkah kedua dipasangkan. * 1.2: File logfile harus ada (file wtmpx) * 1.3: Apakah masih ada log yang dapat diuraikan * 2: Buat acak ACCHACCESSFILE untuk membaca logfile * 3: Pindahkan pointer ke posisi baca terakhir, persiapkan * Mulai Parsing Pekerjaan Parse * 4: Parsing Work * 4.1: Buat koleksi daftar untuk menyimpan setiap log setelah parse Parsing * 4: Parsing work * 4.1: Buat koleksi daftar untuk menyimpan setiap log parkir * 4: Parsing work * 4.1: Buat koleksi daftar untuk menyimpan setiap log parkir * Di setiap log (pengguna, pid, ketik, waktu, host) * dan simpan dengan instance logData, dan kemudian simpan * instance logdata ke dalam koleksi * 5: Simpan semua log dalam koleksi dalam unit perilaku untuk * TextLogFile * 6: Simpan informasi bookmark * 7: return true, menunjukkan bahwa karya tersebut diselesaikan * *// random accessfile raf = null; null; coba {// 1 //1.1 if (textlogfile.exists ()) {return true; } //1.2 if (! LogFile.exists ()) {System.out.println (logfile+"tidak ada!"); mengembalikan false; } //1.3 Long LastPosition = HasLogs (); // Piling // System.out.println (// "LastPosition:"+LastPosition //); if (lastposition <0) {System.out.println ("Tidak ada log yang bisa diuraikan!"); mengembalikan false; } // 2 raf = new randomAccessFile (logfile, "r"); // 3 raf.seek (lastposition); // 4 Daftar <GOGDATA> Daftar = ArrayList baru <OgData> (); untuk (int i = 0; i <batch; i ++) {// Sebelum setiap parsing, tentukan apakah masih ada log yang dapat diuraikan if (logfile.length ()-lastposition <logdata.log_length) {break; } // Parse user raf.seek (lastposition+logdata.user_offset); String user = ioutil.readstring (raf, logdata.user_length) .trim (); // parse pid raf.seek (lastposition+logdata.pid_offset); int pid = raf.readint (); // parse type raf.seek (lastposition+logdata.type_offset); tipe pendek = raf.readshort (); // parse time raf.seek (lastposition+logdata.time_offset); int time = raf.readint (); // Tempel host raf.seek (lastposition+logdata.host_offset); Host string = ioutil.readString (raf, logdata.host_length) .trim (); LogData Log = LogData baru (Pengguna, PID, Jenis, Waktu, Host); list.add (log); // piling // system.out.println (log); // unggah log, perbarui lastposition lastposition = raf.getFilepointer (); } // 5 ioutil.savecollection (Daftar, TextLogFile); // 6 Simpan file bookmark ioutil.Savelong (LastPosition, LastPositionFile); // 7 Return true; } catch (Exception e) {System.out.println ("Log passing gagal!"); e.printstacktrace (); } akhirnya {if (raf! = null) {coba {raf.close (); } catch (ioException e) {e.printstacktrace (); }} return false; } /*** Langkah pertama adalah mengurai tautan di log. * Menurut lokasi catatan file bookmark, tentukan apakah masih ada * log untuk parse. Jika ada, posisi terakhir* akan dikembalikan. Jika tidak ada, kembalikan -1. * @return */ private long haslogs () {coba {/ * * Jika lastpositionFile tidak ada, itu berarti * tidak pernah diuraikan, sehingga Anda dapat mengurai dari awal */ if (! LastPositionFile.exists ()) {return 0; } long lastposition = ioutil.readlong (lastpositionFile); if (logfile.length ()-lastposition> = logdata.log_length) {return lastposition; }} catch (Exception e) {e.printstacktrace (); } return -1; } public static void main (string [] args) {coba {dmsclient client = new dmsclient (); client.start (); } catch (Exception e) {System.out.println ("Client Run Gagal!"); }}} 3. ioutil.java
paket com.dms; impor java.io.bufferedreader; impor java.io.file; impor java.io.fileinputStream; impor java.io.inputStreamreader; impor java.io.printwriter; impor java.randomaccsfile; impor java.util.rAvlist; com.dms.bo.logdata; /** * This class is a tool class that is responsible for client IO operations* @author Administrator * */public class IOUtil { /** * Read each line of string from the given file (pair log) * and save a collection to return * @param file * @return * @throws Exception */ public static List<String> loadLogRec(File file) throws Exception{ BufferedReader br = null; coba {br = new BufferedReader (inputStreamReader baru (FileInputStream baru (file))); Daftar <String> Daftar = ArrayList baru <string> (); Garis string = null; while ((line = br.readline ())! = null) {list.add (line); } daftar pengembalian; } catch (Exception e) {E.PrintStackTrace (); lempar e; } akhirnya {if (br! = null) {br.close (); }}} /** * Baca setiap log berpasangan dari file yang diberikan dan simpan ke dalam * koleksi dan kemudian kembali. * file @param * @return * @throws Exception */ Daftar Statis Publik <OgData> LoadLogData (File File) melempar Exception {buferedReader br = null; coba {br = new BufferedReader (inputStreamReader baru (FileInputStream baru (file))); Daftar <GOGDATA> Daftar = ArrayList baru <OgData> (); Garis string = null; while ((line = br.readline ())! = null) {logData logData = LogData baru (line); list.add (logdata); } daftar pengembalian; } catch (Exception e) {E.PrintStackTrace (); lempar e; } akhirnya {if (br! = null) {br.close (); }}} / ** * Tulis nilai panjang yang ditentukan ke baris pertama dari file yang diberikan sebagai string * @param l * @param file * @throws Exception * / public static void savelong (long lon, file file) melempar pengecualian {printwriter pw = null; coba {pw = printwriter baru (file); pw.println (lon); } catch (Exception e) {E.PrintStackTrace (); lempar e; } akhirnya {if (pw! = null) {pw.close (); }}}} /*** Tulis string yang dikembalikan dengan metode toString dari setiap elemen dalam koleksi ke file yang ditentukan dalam unit perilaku. * @param c * @param File * @throws Exception */ public static void savecollection (koleksi c, file file) melempar pengecualian {printwriter pw = null; coba {pw = printwriter baru (file); untuk (objek o: c) {pw.println (o); }} catch (Exception e) {e.printstacktrace (); lempar e; } akhirnya {if (pw! = null) {pw.close (); } } } /** * Start continuous from the current position of the given RandomAccessFile* Read length bytes and convert them into a string and return * @param raf * @param length * @return * @throws Exception */ public static String readString( RandomAccessFile raf,int length) throws Exception{ try { byte[] data = new byte[length]; raf.read (data); mengembalikan string baru (data, "iso8859-1"); } catch (Exception e) {E.PrintStackTrace (); lempar e; }} / ** * Baca baris pertama string dari file yang diberikan dan kemudian * return * @param file * @return * @throws Exception * / Public static long readlong (file file) melempar pengecualian {buferedReader br = null; coba {br = new BufferedReader (inputStreamReader baru (FileInputStream baru (file))); String line = br.readline (); return long.parselong (line); } catch (Exception e) {E.PrintStackTrace (); lempar e; } akhirnya {if (br! = null) {br.close (); }}}}
4. Config.xml
<? Xml Version = "1.0" encoding = "UTF-8"?> <Config> <!-nama file log sistem unix-> <nogfile> wtmpx </togfile> <!-simpan nama file log terakhir-> <textLogfile> LOG.TXT </TextLogFile> <!-nama file bookmark-> <textLogfile> Log.txt </TextLogFile> <!-nama file Bookmark-> <pextLogfile> </TextLogFile> <!-Bookmark Nama file-> <textLogFile> Number of entries per parsed log--> <batch>10</batch> <!-- Paired log file name --> <logrecfile>logrec.txt</logrecfile> <!-- Unpaired log file name --> <loginlogfile>login.txt</loginlogfile> <!-- Unpaired log file name --> <LoginLogFile> login.txt </toginlogfile> <!-Alamat server-> <serverHost> localhost </verhost> <!-port server-> <serverport> 8088 </versverport> </onfig>
5. Server-Config.xml
<? Xml Version = "1.0" encoding = "UTF-8"?> <Config> <!-Nama file server yang menyimpan file log berpasangan-> <Gergrecfile> server-logs.txt </logrecfile> <!-Jumlah utas Pool-> <treadsum> 30 </threadsum> <!-server port-server-server 8.> <Treadsum> </30 </threadsum> <!-server-server-server-server8888 </30 </threadsum> <!-server-server-server-> <tandpport> <TreadSum> </threadsum> <!-server-server-server-server 8 thread readsport> <tandpport> </Threadsum> </threadsum> <!
Di atas adalah semua tentang artikel ini, saya harap ini akan membantu untuk pembelajaran semua orang.