Saya baru -baru ini memulai proyek di mana ada kebutuhan untuk komunikasi web online. Saya sudah lama tidak menulis kode dan saya tidak terbiasa dengannya. Jadi saya pertama kali menulis demo dan mempraktikkannya dan membagikannya di platform Wulin Network untuk membuat catatan sehingga dapat digunakan dengan semua orang.
Izinkan saya memberi tahu Anda langkah -langkah implementasi:
1. Gunakan komponen dan soket AWT untuk mengimplementasikan klien tunggal sederhana untuk terus mengirim pesan ke server;
2. Dikombinasikan dengan utas, sadari koneksi multi-klien ke server untuk mengirim pesan;
3. Menerapkan pesan klien penerusan server ke semua klien dan menampilkannya pada klien secara bersamaan;
4. Ubah antarmuka jendela yang dihasilkan oleh komponen AWT ke antarmuka yang ditampilkan oleh front-end JSP atau HTML, dan ubah klien yang diimplementasikan oleh Java Socket ke implementasi teknologi front-end.
Di sini kami pertama -tama menerapkan fungsi sederhana dari langkah pertama, kesulitannya adalah:
1. Saya tidak pernah menggunakan komponen AWT dan saya tidak pernah menggunakan acara mendengarkan yang berhubungan dengan Java;
2. Saya belum menggunakan soket untuk jangka waktu yang lama untuk berinteraksi antara klien dan server, dan saya belum benar -benar mengembangkan struktur CSS.
Kode untuk mengimplementasikan fungsi adalah sebagai berikut:
Klien:
paket chat.chat; impor java.awt.borderlayout; impor java.awt.frame; impor java.awt.textarea; impor java.awt.textfield; impor java.awt.event.actionevent; impor java.awt.event.actionlistener; impor java.awt.event.windowadapter; impor java.awt.event.windowevent; impor java.io.dataoutputStream; impor java.io.ioException; impor java.net.socket; impor java.net.unknownhostException; /** * Online chat client 1. Generate graphical window interface outline 2. Add a close event to the outline 3. Add an input area and a content display area to the outline 4. Add a carriage return event for the input area* 5. Establish a server connection and send data* * @author tuzongxun123 * */ public class ChatClient extends Frame { // User input area private TextField tfTxt = new TextField(); // tampilan konten Area TextArea Private Taste = new TextArea (); soket soket pribadi = null; // Data Output Stream Private DataOutputStream DataOutputStream = null; public static void main (string [] args) {new chatclient (). launcframe (); } / ** * Buat jendela grafis sederhana * * @author: tuzongxun * @title: launcframe * @param * @return void * @Date 18 Mei 2016 9:57:00 AM * @Throws * / public void launcframe () {setLocation (300, 200); this.setsize (200, 400); add (tftxt, borderlayout.south); add (tarea, borderlayout.north); mengemas(); // Dengarkan acara penutupan jendela antarmuka grafis this.addwindowlistener (windowAdapter baru () {@Override public void windowclosing (windowevent e) {system.exit (0); disconnect ();}}); tftxt.addactionListener (tflister baru ()); setVisible (true); menghubungkan(); } / ** * Sambungkan ke server * * @Author: tuzongxun * @title: connect * @param * @return void * @Date 18 Mei 2016 9:56:49 AM * @THROWS * / public void connect () {coba {// Buat socket server baru = socket baru ("127.0.0.0.0.0.0.0.1.1); // Dapatkan aliran output klien dataOutputStream = DataOutputStream baru (socket.getoutputStream ()); System.out.println ("Sambungkan ke server"); } catch (unknownHostException e) {e.printstacktrace (); } catch (ioException e) {e.printstacktrace (); }} / ** * Tutup sumber daya klien * * @author: tuzongxun * @title: Disconnect * @param * @return void * @Date 18 Mei 2016 9:57:46 AM * @throws * / public void Disconnect () {DataOutputStream.close (); socket.close (); } catch (ioException e) {e.printstacktrace (); }} / ** * Kirim pesan ke server * * @Author: tuzongxun * @title: sendMessage * @param @param Text * @return void * @date 18 Mei 2016 9:57:56 AM * @throws * / private void sendMessage (string text) {data {dataOutSputStream * @throws * / private void (string text) {DataOutStream.WriteTer (string) {DataOutStream.WrowseT (String Text) {DataOutStream.WrowseR (String Text) {DataOutStream. dataOutputStream.flush (); } catch (ioException e1) {e1.printstacktrace (); }} / ** * Area input jendela grafis untuk mendengarkan acara carriage return * * @author tuzongxun123 * * / kelas privat tflister mengimplementasikan ActionListener {@Override public void actionPerformed (actionEvent e) {string text = tftx.gettext (). Trim (); Taxa.SetText (teks); tftxt.setText (""); // Kirim data ke server sendMessage (teks); }}}Server:
paket chat.chat; impor java.io.datainputstream; impor java.io.eofexception; impor java.io.ioException; impor java.net.bindexception; impor java.net.serversocket; impor java.net.socket; /*** Java menggunakan komponen soket dan awt untuk hanya mengimplementasikan fungsi obrolan online. Server dapat mewujudkan server untuk terus mengirim pesan ke server setelah menghubungkan satu klien* tetapi tidak mendukung banyak klien untuk terhubung pada saat yang sama. Alasannya adalah bahwa setelah mendapatkan koneksi klien dalam kode, itu akan terus mendengarkan input klien dilingkarkan, menyebabkan penyumbatan* sehingga server tidak dapat mendengarkan klien lain dua kali. Jika Anda ingin mengimplementasikannya, Anda perlu menggunakan asynchronous atau multithreaded * * @author tuzongxun123 * */ kelas publik chatserver {public static void main (string [] args) {// apakah server mulai berhasil boolean isStart = false; // Server Socket Server SS = NULL; // soket soket klien soket = null; // Server Baca Data Klien Input Stream DataInputStream DataInputStream = null; Coba {// Mulai Server SS = New ServerSocket (8888); } catch (BindException e) {System.out.println ("Port sudah digunakan"); // Tutup program System.exit (0); } catch (Exception e) {E.PrintStackTrace (); } coba {isStart = true; while (isStart) {boolean isConnect = false; // Mulai soket mendengarkan = ss.accept (); System.out.println ("One Client Connect"); isConnect = true; while (iSconnect) {// Dapatkan aliran input klien datalputStream = new DataInputStream (socket.getInputStream ()); // Baca data yang disahkan oleh string klien pesan = datalputStream.readutf (); System.out.println ("Klien mengatakan:" + pesan); }}} catch (eOfException e) {System.out.println ("Klien Tertutup!"); } catch (Exception e) {E.PrintStackTrace (); } akhirnya {// tutup sumber daya terkait coba {datalputStream.close (); socket.close (); } catch (ioException e) {e.printstacktrace (); }}}}Di atas adalah pengetahuan yang relevan tentang soket java yang menerapkan fungsi obrolan online sederhana (i) yang diperkenalkan oleh editor. Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!