القراءة ذات الصلة: برمجة غرفة دردشة جافا مقبس (2) باستخدام مقبس لتنفيذ غرفة دردشة واحدة
هناك بالفعل العديد من الأمثلة على استخدام Sockets لتنفيذ الدردشة على الإنترنت ، لكنني رأيت الكثير منها ، وهناك مشاكل أكثر أو أقل.
هنا سوف أقوم بتنفيذ مثال دردشة كامل نسبيًا وشرح المنطق فيه.
نظرًا لأن المقبس كبير نسبيًا ، فسوف أقسم بعض المقالات لكتابة مثال مقبس كامل نسبيًا.
هنا ننفذ أولاً أبسط وظيفة للاتصال العميل للخادم والعميل لتحقيق دفع الرسائل.
الغرض: يقوم الخادم بإنشاء اتصال مع العميل. يمكن للعميل إرسال رسائل إلى الخادم ، ويمكن للخادم دفع الرسائل إلى العميل.
1. قم بإنشاء خادم دردشة المقبس باستخدام Java
1. Socketurls يحدد عنوان IP ورقم المنفذ
SocketUrls الفئة العامة {// عنوان IP للسلسلة الثابتة النهائية العامة IP = "192.168.1.110" ؛2. مدخل البرنامج الرئيسي
الطبقة العامة الرئيسية {public static void main (string [] args) يلقي الاستثناء {new chatserver (). initserver () ؛}}3. فئة كيان الفول
userInfobean
الطبقة العامة الرئيسية {public static void main (string [] args) يلقي الاستثناء {new chatserver (). initserver () ؛}}MessageBean الدردشة
MessageBean Public Class Beass يمتد userInfobean {private long messageId ؛ // message idprivate long groupid ؛ // group idprivate boolean isgoup ؛ // ما إذا كانت رسالة جماعية خاصة int atttype ؛ errorcode ؛ // error code // shemit get/set method}4. خدمة دردشة الدردشة ، أهم برنامج
فئة عامة chatserver {// socket service servers serversite server ؛ public gson gson = new gson () ؛/*** تهيئة خدمة المقبس*/public void initserver () {try {// إنشاء sherverse to beatch requists at to to to to to to to) catch blocke.printstacktrace () ؛}}/*** إنشاء إدارة الرسائل واستمر في تلقي الرسائل*/private void createMessage () {try {system.out.println ("في انتظار وصول المستخدم:") مؤشر ترابط لانتظار مقبس آخر للانضمام إلى مؤشر ترابط جديد (جديد RunNable () {public void run () {createMessage () ؛}}). start () ؛ // إرسال معلومات إلى إخراج العميل الإخراج = socket.getOutputStream () الماسحة الضوئية = ماسحة ضوئية جديدة (socket.getInputStream ()) ؛ مؤشر ترابط جديد (جديد Runnable () {public void run () {try {String buffer ؛ بينما (صحيح) {// enter bufferedreader من console strin = new bufferreader (new inputstreamerer (system.in)) ؛ Newline Buffer في النهاية += "/ne" ؛ output.write(buffer.getBytes("utf-8")) ؛// إرسال بيانات الإخراج. استلام الرسائل من المقبس الحالي بينما (صواب) {thread.sleep (500) ؛ // system.out.println ("المحتوى:" + bff.readline ()) ؛ // الحصول على معلومات العميل أثناء ((line = bff.readline ())! = null) {messageBean. messageBean.getUserName ()) ؛ system.out.println ("المحتوى:" + messageBean.getContent ()) ؛}} // server.close () ؛} catch (استثناء e) {// todo auto catch blocke.printstacktrace () ؛ system.out.println (error:2. يتم استخدام جانب Android كجانب للجوال للاتصال بالخادم
1. Appliaction يقوم بتثبيت خدمة الدردشة العالمية
يمتد chatappliaction من الفئة العامة التطبيق {{public static chatserver chatserver ؛ userInfoBean userinfobean public static ؛ Overridepublic void onCreate () {super.oncreate () ؛}}2. عنوان IP ورقم المنفذ يتوافقون مع الخادم
3. قوة الدردشة هي نفس جانب الخادم
4. تخطيط XML. تسجيل الدخول ، الدردشة
1. تسجيل الدخول
<؟ Xmlns: Android = "http://schemas.android.com/apk/res/android" Android: layout_width = "match_parent" Android: layout_height = "match_pa RENT "Android: extrientation =" vertical "> <edittextandroid: id ="@+id/chat_name_text "Android: layout_width =" match_parent "Android: layou t_height = "wall_content" Android: Hint = "username" Android: text = "admin"/> <edittextandroid: id = "@+id/chat_pwd_text" Android: layout_width = " match_parent "Android: layout_height =" wall_content "Android: Hint =" Password "Android: text =" 123123123a "Android: inputType =" numberpassword " /> <buttonandroid: id = "@+id/chat_login_btn" Android: lyout_width = "match_parent" Android: layout_height = "wall_content" Android: hint = "login"/> </linearlayout>
2. الدردشة
<؟ xmlns: Android = "http://schemas.android.com/apk/res/android" xmlns: tools = "http://schemas.android.com/tools أدوات "رأسية": context = ". activity.mainActivity"> <scrollviewandroid: id = "@id/scrollview" Android: layout_width = "match_parent" android: layout_height = "0dp" android: layout_weight = "0.9 OID: id = "@+id/chat_ly" Android: layout_width = "match_parent" Android: layout_height = "match_parent" Android: extrection = "vertical"> </linearlayout> </scrollview> <linearlayoutandroid: layout_width = "match_par ent "Android: layout_height =" wall_content "Android: extream =" horizontal "> <edittextandroid: id ="@id/chat_et_et "Android: layout_width =" 0dp "android: layout_height =" match_parent "android: layout_weight =" 0.8 " /> <buttonandroid:id="@+id/send_btn"android:layout_width="0dp"android:layout_height="match_parent"andidridroid:layout_weight="0.2"android:text="send "/> </linearlayout> </linearlayout>
5. تسجيل الدخول إلى تسجيل الدخول
تمتد تسجيل الدخول إلى الفئة العامة AppCompatActivity {private edittext chat_name_text ، chat_pwd_text ؛ زر خاص chat_login_btn ؛ overrideprotected void onCreate (bundleative_login) (edittext) findViewById ( {overridepublic void onclick (view v) {if (getLogin (chat_name_text.gettext (). tostring (). trim () ، chat_pwd_text.gettext (). MainActivity.class) ؛ بدء النشاط (النية) ؛ إنهاء () ؛}}}) ؛} private boolean getLogin (اسم السلسلة ، السلسلة pwd) {if (textutils.isempty (name) || textutils.isempty (pwd)) return false ؛ if (name.equals ( false ؛} private void getChatserver () {chatappliaction.chatserver = new chatserver () ؛}}6. دردشة النشاط الرئيسي
يمتد النشاط الرئيسي الفئة العامة appCompatActivity {private linearlayout chat_ly ؛ textview خاص left_text ، right_view ؛ edittext chat_et ؛ زر خاص send_btn ؛ private viewgroup.layoutparams layoutparams = new viewgroup.layoutparams (viewgroup.layoutparams.match_parent ، viewgroup.layoutparams.wrap_content) ؛@overrideprotected void onCreate (bundle SaveInstancestate) {super.oncreate (SaveInstancestate) ؛ setContentView (r.layout.activity_main) ؛ chat_ly = (linearlayout) FindViewById (r.id.chat_et) ؛ send_btn = (button) findViewById ( {chatappliaction.chatserver.sendMessage (chat_et.gettext (). {overridepublic void handlemessage (message msg) {if (msg.what == 1) {// بعد إرسال الرسالة ، قم بتحديث uichat_ly.addview (initleftview (msg.obj.toString ())) ؛ messageContent) {right_view = new textView (this) ؛ right_view.setLayoutParams (layoutparams) ؛ releview messageContent) {left_text = new textView (this) ؛ left_text.setLayoutParams (layoutparams) ؛ left_text.setgravity (view.focus_left) ؛ left_text.settex7. منطق دردشة الدردشة ، الأهم
Public Class chatserver {private Socket Socket ؛ معالج المعالج الخاص ؛ MessageBean MessageBean ؛ private gson gson = new GSON () قائمة الانتظار ، المستخدمة لتمرير الرسائل ** param handler*/public void setchathandler (معالج المعالج) {this.handler = handler ؛} private void initchatserver () {// Open Thread لتلقي Message receivemessage () ؛} messageBean () ؛ messageBean.setUserId (1) ؛ messageBean.setMessageId (1) ؛ messageBean.SetchatType (1) ؛ messageBean.setUsername ("admin") ؛ chatappliAction null) {message message = handler.obtainmessage () ؛ message. what = 1 ؛ message.obj = "تم إغلاق الخادم" ؛ handler.sendmessage (message) ؛ return ؛} byte [] str = contentMsg.getBytes ("utf-8") ؛ gson.tojson (messageBean) ؛/*** لأن readline () على الخادم يحجب القراءة* إذا لم يتمكن من قراءة حرف الخط الجديد أو انتهاء دفق الإخراج ، فسيتم حظره هناك* بحيث تتم إضافة حرف خط جديد في نهاية رسالة JSON لإخبار الخادم بأن الرسالة قد تم إرسالها**/messagejson += "/nemritput.write ، print Output.flush () ؛ // قم بتحديث دفق الإخراج بحيث يتلقى الخادم السلسلة فورًا} catch (استثناء e) {e.printStackTrace () ؛ log.e ("test" ، "خطأ:" + e.toString ()) ؛ إلى المنفذ الأصلي 8080 Socket = مقبس جديد (socketurls.ip ، socketurls.port) ؛ // احصل على دفق الإدخال من كائن المقبس وإنشاء كائن bufferreaderer المقابل printWriter = new printWriter (socket.getOutputStream () ؛ DataOtputStream (Socket.getOutputStream ()) ؛ // احصل على معلومات من العميل Bufferreader BFF = جديد BufferReader (New InportStreamReader (إدخال)) ؛ // اقرأ سطر معلومات الخادم المرسل "المحتوى:" + سطر) ؛ رسالة رسالة = handler.obtainmessage () ؛ message.Obj = line ؛ message.what = 1 ؛ Handler.SendMessage (message) ؛} if (socket == null) break ؛} output.close () ؛ // close socket tream output input.close () ؛ {E.PrintStackTrace () ؛ log.e ("Test" ، "Error:" + E.ToString ()) ؛}}}). Start () ؛}}}بالمناسبة ، تم الانتهاء من جميع الكود.
يمكن لهذا العرض التوضيحي تمكين الهاتف المحمول من إرسال رسائل إلى الخادم والخادم إلى الهاتف المحمول.
يمكن اعتبار هذا العرض التوضيحي وظيفة دفع ، لكن الدفعة الحقيقية ليست بهذه البساطة. كمبتدئين في المقابس ، يمكنك رؤية أفكار برمجة المقبس.
ما سبق هو برمجة غرفة دردشة جافا مقبس جافا التي قدمها المحرر (1) لاستخدام المقبس لتنفيذ دفع رسائل الدردشة. آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!