الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة في الأرسال و الأتسقبال باستخدام Socket

بدأه MKSoft في 22 أبريل 2008 · 22 رد · 1,603 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

تواجهني مشكلة اخواني في عملية الارسال و الاستقبال باستخدام Socket , حيث ينتج عندي NullPointerException أثناء الإرسال , لذلك ارجو منكم مساعدتي .. الكود في المرفقات ..

#2

معقول

There is no POSTS

#3

لكي تحصل على أجوبة يا أخي

فصل في شرح مشكلتك

اعرض الأجزاء التي تعتقد أن المشكلة فيها وهكذا

لكن لا تتوقع أن تجد من سيبحث عن المشكلة ليحلها

لا تأخذ كلامي على محمل الإهانة

فأنا لا أقصدها

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#4

ولايهمك اخي علاء .. لكن حقيقة انا وضعت الكود حتى يرى الأعضاء المشكلة بأنفسهم , لأني لا أبالغ لو قلت اني انا لم افهم السبب الحقيقي للمشكلة بعد .

على العموم المشكلة هي ...

قمت بإنشاء برنامج chatting بسيط باستخدام Socket , وعندما يريد Client ان يرسل اي نص إلى Server أو العكس و الضغط Enter أو على زر الإرسال , فإنه ينتج NullPointerException , وهاهي صورة هذا الإستثناء .

المرفقات (البرنامج)

Src.rar

تم تعديل هذه المشاركة بواسطة MKSoft في 23 أبريل 2008 في 23:15

#5

السلام عليكم

لقد قمت بالتعديل على شيفرتك أخي

وهذا برنامج المحادثة الخاص بالسيرفر

لاحظ أني وضعت تعليقات بجانب الأجزاء التي قمت بإضافتها وحذفها

/*
 * Messanger.java
 *
 * Created on 20 مارس, 2008, 12:59 م
 */



/**
 *
 * @author  Administrator
 */
public class Messanger extends javax.swing.JFrame {

	/** Creates new form Messanger */

	Chatting_Service cs;
	public Messanger() {
		initComponents();

	}

	/** This method is called from within the constructor to
	 * initialize the form.
	 * WARNING: Do NOT modify this code. The content of this method is
	 * always regenerated by the Form Editor.
	 */
	// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
	private void initComponents() {

		jScrollPane1 = new javax.swing.JScrollPane();
		showing_textarea = new javax.swing.JTextArea();
		jToolBar1 = new javax.swing.JToolBar();
		chatting_textfiled = new javax.swing.JTextField();
		send_button = new javax.swing.JButton();
		exit_button = new javax.swing.JButton();

		setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

		showing_textarea.setColumns(20);
		showing_textarea.setRows(5);
		jScrollPane1.setViewportView(showing_textarea);

		jToolBar1.setRollover(true);
		jToolBar1.setEnabled(false);

		chatting_textfiled.setFont(new java.awt.Font("Tahoma", 1, 11));
		chatting_textfiled.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent evt) {
				chatting_textfiledActionPerformed(evt);
			}
		});

		send_button.setText("Send");
		send_button.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent evt) {
				send_buttonActionPerformed(evt);
			}
		});

		exit_button.setText("Exit");
		exit_button.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent evt) {
				exit_buttonActionPerformed(evt);
			}
		});

		javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
		getContentPane().setLayout(layout);
		layout.setHorizontalGroup(
			layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
			.addGroup(layout.createSequentialGroup()
				.addContainerGap()
				.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
					.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
						.addComponent(chatting_textfiled, javax.swing.GroupLayout.DEFAULT_SIZE, 238, Short.MAX_VALUE)
						.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
						.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
							.addComponent(send_button, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
							.addComponent(exit_button, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
					.addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 307, Short.MAX_VALUE)
					.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 307, Short.MAX_VALUE))
				.addContainerGap())
		);
		layout.setVerticalGroup(
			layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
			.addGroup(layout.createSequentialGroup()
				.addContainerGap()
				.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 211, javax.swing.GroupLayout.PREFERRED_SIZE)
				.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
				.addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
				.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
				.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
					.addGroup(layout.createSequentialGroup()
						.addComponent(send_button)
						.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
						.addComponent(exit_button))
					.addComponent(chatting_textfiled, javax.swing.GroupLayout.DEFAULT_SIZE, 52, Short.MAX_VALUE))
				.addContainerGap())
		);

		pack();
	}// </editor-fold>//GEN-END:initComponents

	private void send_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_send_buttonActionPerformed
		if(cs==null)//added
			cs = new Chatting_Service ( this.showing_textarea );//added
		cs.send( chatting_textfiled.getText() );
		chatting_textfiled.setText("");

	}//GEN-LAST:event_send_buttonActionPerformed

	private void exit_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exit_buttonActionPerformed
		System.exit(0);
	}//GEN-LAST:event_exit_buttonActionPerformed

	private void chatting_textfiledActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chatting_textfiledActionPerformed
		cs.send( chatting_textfiled.getText() );
		chatting_textfiled.setText("");
	}//GEN-LAST:event_chatting_textfiledActionPerformed

	/**
	 * @param args the command line arguments
	 */
	public static void main(String args[]) {
	  //  java.awt.EventQueue.invokeLater(new Runnable() {
		//	public void run() {
				//new Messanger().setVisible(true); modefied
		Messanger m=new Messanger();
		m.setVisible(true);
				//new Messanger().cs = new Chatting_Service ( new Messanger().showing_textarea );deleted
		  //  }
	   // });
	}

	// Variables declaration - do not modify//GEN-BEGIN:variables
	private javax.swing.JTextField chatting_textfiled;
	private javax.swing.JButton exit_button;
	private javax.swing.JScrollPane jScrollPane1;
	private javax.swing.JToolBar jToolBar1;
	private javax.swing.JButton send_button;
	private javax.swing.JTextArea showing_textarea;
	// End of variables declaration//GEN-END:variables

}

أي استفسارات أنا جاهز بإذن الله

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#6

شكرا لك أخي علاء على المحاولة لكنها لم تنجح للأسف ...

أرجو منك أخي ان تجرب الكود بنفسك وترى النتائج , بعد إذنك طبعا .. :lol:

تحياتي للجميع

#7

لقد جربته يا أخي

ما هي المشكلة التي تواجهك؟؟؟

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#8

سامحني أخي علاء انا غلبتك معاي .. لكن ارجو منك ان تقوم بتحميل المرفقات و تجرب البرنامج عندك (لن يتطلب منك الأمر إلا بضع دقائق ) , حيث إذا نجح البرنامج عند تجريبك له , سيكون ذلك مؤشر على ان المشكلة ليست في البرنامج و إنما في جهازي , حيث قمت بعمل بعض التعديلات ... أرجو منك ذلك و لك جزيل الإخلاص والوفاء .

SrcCS.rar

#9

أخي MKSoft

لا تفهمني بشكل خاطئ

أنا أريد أن أساعدك

لكني لا أحب أن أضيع وقتي في البحث عن المشكلة التي تواجهك

بينما كان من الأفضل لي ولك أن أستغل الوقت في حل المشكلة

وأعوذ بالله أن يكون هذا كبر أو غرور

هذه الشيفرة الخاصة بك

وقد عدلتها بحيث فصلت الإستقبال عن الإرسال

في كل من الخادم والعميل

أي أسئلة أنا في الخدمة

تحياتي

src.rar

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#10

بارك الله فيك أخي علاء على كل المساعدة لكن عندي استفسارين ..

اولا // انت قلت :-

اقتباس
وقد عدلتها بحيث فصلت الإستقبال عن الإرسال

ماذا قصدت انت بهذه الجملة , اولم يكن الإرسال و الإستقبال مفصولين ؟؟؟؟!!!!

ثانيا // لقد أضفت Thread في الدالة الخاصة بالإستقبال لماذا؟؟؟؟؟

public void recive()
	{
		Thread th=new Thread(new Runnable(){

			public void run() {
				while (true) {
					try {
						msg = receiver.readUTF();
					} catch (IOException e) {
						e.printStackTrace();}
					text.append("\nClient :: " + msg);
			}}
			});
		th.start();

	}
#11

هذا بالضبط ما قصدته

هناك دوال تقوم بإيقاف البرنامج حتى تحصل على رد

منها readUTF

وأنا لا أستطيع أن أوقف عمل برنامجي لخاطر أي أحد

لذلك أفصل هذه الدوال في خيط مستقل

حتى لاتوقف عمل البرنامج

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#12

شكرا أخي علاء .. لقد استفدت منك كثيرا ....

و أريد أن أسألك هل بإمكاني ان انشأ مثلا لكل دالة Thread خاص بها ؟؟؟

#13

لدي استفسار اخر اخي علاء ....

و سامحتي على تطفلي الزائد عليك , لكن نظرا لعلمك الجيد في البرمجة احب أن أستفيد منك .

في كتاب Java How To Program 5 , وجدت كود إرسال و إستقبال Chat باستخدام Socket , وبدون استخدام Thread في دالة الإستقبال , فكيف تفسر مرونة و كفاءة عملية الأرسال و الإستقبال في كل من الطرفين .

وهاهو الكود ::

public void runServer()
	  {
		 try // set up server to receive connections; process connections
		 {
			server = new ServerSocket( 12345, 100 ); // create ServerSocket
			 while ( true )
			{
			   try
			   {
				  waitForConnection(); // wait for a connection
				  getStreams(); // get input & output streams
				  processConnection(); // process connection
			   } // end try
			   catch ( EOFException eofException )
			   {
				  displayMessage( "\nServer terminated connection" );
			   } // end catch
			   finally
			   {
				  closeConnection(); // close connection
				  counter++;
			   } // end finally
			} // end while
		 } // end try
		 catch ( IOException ioException )
		 {
			ioException.printStackTrace();
		 } // end catch
	  } // end method runServer
	  private void waitForConnection() throws IOException
	  {
		 displayMessage( "Waiting for connection\n" );
		 connection = server.accept(); // allow server to accept connection
		 displayMessage( "Connection " + counter + " received from: " +
			connection.getInetAddress().getHostName() );
	 } // end method waitForConnection

	  private void getStreams() throws IOException
	 {
		output = new ObjectOutputStream( connection.getOutputStream() ); 
		output.flush(); // flush output buffer to send header information

		// set up input stream for objects
		input = new ObjectInputStream( connection.getInputStream() );
		displayMessage( "\nGot I/O streams\n" );
	} // end method getStreams
	 private void processConnection() throws IOException
	 {
		String message = "Connection successful";
	   sendData( message ); // send connection successful message

		// enable enterField so server user can send messages
		setTextFieldEditable( true );

		do // process messages sent from client
		{
		   try // read message and display it
		   {
			  message = ( String ) input.readObject(); // read new message
			  displayMessage( "\n" + message ); // display message
		   } // end try
		   catch ( ClassNotFoundException classNotFoundException )
		   {
			  displayMessage( "\nUnknown object type received" );
		   } // end catch

		} while ( !message.equals( "CLIENT>>> TERMINATE" ) );
	 } // end method processConnection

	 // close streams and socket
	 private void closeConnection()
	 {
		displayMessage( "\nTerminating connection\n" );
		setTextFieldEditable( false ); // disable enterField

		try
		{
		   output.close(); // close output stream
		   input.close(); // close input stream  
		   connection.close(); // close socket   
		} // end try
		catch ( IOException ioException )
		{
		   ioException.printStackTrace();
		} // end catch
	 } // end method closeConnection

	 // send message to client
	 private void sendData( String message )
	 {
		try // send object to client
		{
		   output.writeObject( "SERVER>>> " + message );
		   output.flush(); // flush output to client	
		   displayMessage( "\nSERVER>>> " + message );
		} // end try
		catch ( IOException ioException )
		{
		   displayArea.append( "\nError writing object" );
		} // end catch
	 } // end method sendData

	 // manipulates displayArea in the event-dispatch thread
	 private void displayMessage( final String messageToDisplay )
	 {
		SwingUtilities.invokeLater(
		   new Runnable()
		   {
			  public void run() // updates displayArea
			  {
				 displayArea.append( messageToDisplay ); // append message
			  } // end method run
		   } // end anonymous inner class
		); // end call to SwingUtilities.invokeLater
	 }
#14

في الشبكات بشكل عام أخي

عملية الإرسال ليست مشكلة بأي حال من الأحوال

كل ما عليك أن تقوم بالإرسال

المشكلة تكمن في عملية الإستقبال

عملية الإستقبال لا تعلم متى ستصلها البيانات التي ستستقبلها

لهذا نقوم بفصلها عن الخيط الرئيسي لكي لا تقوم بإيقاف عمل البرنامج

لكن إذا كان لديك برنامج يعمل وفق خطة عمل معينة

بمعنى أنك تعلم أنه في الوقت الفلاني ستحصل على بيانات

فلا ضرر من الإنتظار

في الأغلب البرنامج الذي طرحته يندرج تحت هذا الموضوع

ملاحظة أخرى لو لم تقم بالفصل

فإنك ستلاحظ أن الواجهة GUI

تعمل بالكاد أو قد لا تعمل مطلقاً

وذلك لأن الخيط رئيسي قد تم حجبه block

حتى تصل بيانات جديدة

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#15

شكرا أخي علاء .. لقد استفدت منك كثيرا ....

و أريد أن أسألك هل بإمكاني ان انشأ مثلا لكل دالة Thread خاص بها ؟؟؟

#16

لا أنصحك بهذا أخي

لأن هذه العملية تحتاج إلى وقت في بناء الخيط

بصراحة الموضوع يتبع مازاد عن حده انقلب ضده

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#17
alaadiaa كتب:
لا أنصحك بهذا أخي

لأن هذه العملية تحتاج إلى وقت في بناء الخيط

بصراحة الموضوع يتبع مازاد عن حده انقلب ضده

تحياتي

طيب شو الحل اخي علاء ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

#18

الحل أن تتعرف على الدوال التي تتعامل معها

إن كانت إحداهم تقوم بعملية انتظار

أيضاً أي حلقات غير منتهية

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#19

في الحقيقة لست خبيرا بما فيه الكفاية لكي اقول ما لدي في هذه المشكلة

ولكن لدي بعض التمارين يمكن ان تساعد في الفهم او تكون حلا لمشكلة معينه

التمارين في المرفقات

chat.zip

#20

ِكرا أخي علاء و الله استفدت منك كتيير بارك الله فيك .

أشكرك أخي jsp على محاولتك و بارك الله فيك.

#21

تأكد أنك تستحق أكثر

لكني أعاني من نقص في الوقت

أرجو أن تعذرني إن كنت قصرت في شيء

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#22

هل من الممكن ارفاق الكود ككود للكلاينت والسيرفر مش ملف مرفق

اتمنى نشوف الكود وتقولنا وين المشكله بالضبط

#23

بالنسبة لك أخي علاء , اقول جزاك الله خيرا على كل مجهود لك , وعلى كلامك المليء بالأمل , و أظن و الله أعلم انك من فلسطين مثلي , حيث منارة العلم الأولى في العالم العربي كما اعتبرها انا على الأقل.

اقتباس
هل من الممكن ارفاق الكود ككود للكلاينت والسيرفر مش ملف مرفق

اتمنى نشوف الكود وتقولنا وين المشكله بالضبط

بناء على طلبك أخي Xline سأقوم بوضع الكود لكنه كبيير نوعا ما .

أولا // الأكواد الخاصة ب Client

Client

public class Messanger extends javax.swing.JFrame {

	/** Creates new form Messanger */

	Chatting_Service cs;
	public Messanger() {
		initComponents();
	}

	/** This method is called from within the constructor to
	 * initialize the form.
	 * WARNING: Do NOT modify this code. The content of this method is
	 * always regenerated by the Form Editor.
	 */
	// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
	private void initComponents() {

		jScrollPane1 = new javax.swing.JScrollPane();
		showing_textarea = new javax.swing.JTextArea();
		jToolBar1 = new javax.swing.JToolBar();
		chatting_textfiled = new javax.swing.JTextField();
		send_button = new javax.swing.JButton();
		exit_button = new javax.swing.JButton();

		setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

		showing_textarea.setColumns(20);
		showing_textarea.setRows(5);
		jScrollPane1.setViewportView(showing_textarea);

		jToolBar1.setRollover(true);
		jToolBar1.setEnabled(false);

		chatting_textfiled.setFont(new java.awt.Font("Tahoma", 1, 11));
		chatting_textfiled.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent evt) {
				chatting_textfiledActionPerformed(evt);
			}
		});

		send_button.setText("Send");
		send_button.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent evt) {
				send_buttonActionPerformed(evt);
			}
		});

		exit_button.setText("Exit");
		exit_button.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent evt) {
				exit_buttonActionPerformed(evt);
			}
		});

		javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
		getContentPane().setLayout(layout);
		layout.setHorizontalGroup(
			layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
			.addGroup(layout.createSequentialGroup()
				.addContainerGap()
				.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
					.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
						.addComponent(chatting_textfiled, javax.swing.GroupLayout.DEFAULT_SIZE, 238, Short.MAX_VALUE)
						.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
						.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
							.addComponent(send_button, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
							.addComponent(exit_button, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
					.addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 307, Short.MAX_VALUE)
					.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 307, Short.MAX_VALUE))
				.addContainerGap())
		);
		layout.setVerticalGroup(
			layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
			.addGroup(layout.createSequentialGroup()
				.addContainerGap()
				.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 211, javax.swing.GroupLayout.PREFERRED_SIZE)
				.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
				.addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
				.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
				.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
					.addGroup(layout.createSequentialGroup()
						.addComponent(send_button)
						.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
						.addComponent(exit_button))
					.addComponent(chatting_textfiled, javax.swing.GroupLayout.DEFAULT_SIZE, 52, Short.MAX_VALUE))
				.addContainerGap())
		);

		pack();
	}// </editor-fold>//GEN-END:initComponents

	private void send_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_send_buttonActionPerformed
		cs.send( "Hello how are you"/*chatting_textfiled.getText()*/ );
		chatting_textfiled.setText("");

	}//GEN-LAST:event_send_buttonActionPerformed

	private void exit_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exit_buttonActionPerformed
		System.exit(0);
	}//GEN-LAST:event_exit_buttonActionPerformed

	private void chatting_textfiledActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chatting_textfiledActionPerformed
		cs.send( chatting_textfiled.getText() );
		chatting_textfiled.setText("");
	}//GEN-LAST:event_chatting_textfiledActionPerformed

	/**
	 * @param args the command line arguments
	 */
	public static void main(String args[]) {
	 //   java.awt.EventQueue.invokeLater(new Runnable() {
	   //	 public void run() {
				new Messanger().setVisible(true);
				new Messanger().cs = new Chatting_Service ( new Messanger().showing_textarea );
		 //   }
	   // });
	}

	// Variables declaration - do not modify//GEN-BEGIN:variables
	private javax.swing.JTextField chatting_textfiled;
	private javax.swing.JButton exit_button;
	private javax.swing.JScrollPane jScrollPane1;
	private javax.swing.JToolBar jToolBar1;
	private javax.swing.JButton send_button;
	private javax.swing.JTextArea showing_textarea;
	// End of variables declaration//GEN-END:variables

}

Chatting_Service

import java.io.*;
import java.net.*;
import javax.swing.JTextArea;


public class Chatting_Service 
{
//	ServerSocket server_socket;
	Socket socket;
	DataOutputStream sender;
	DataInputStream receiver;
	JTextArea text;

	public Chatting_Service ( JTextArea text )
	{
		this.text = text;
		try
		{
			socket = new Socket( InetAddress.getLocalHost(),12500 );
		//	server_socket = new ServerSocket( 12500 );
			prepares_stream();

		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
		finally
		{
			close();
		}
	}
	public void prepares_stream()throws Exception
	{
	//	socket = server_socket.accept();
		sender = new DataOutputStream( socket.getOutputStream() );
		receiver = new DataInputStream( socket.getInputStream() );

		String msg = receiver.readUTF();
		text.append("Server :: " + msg);
	}
	public void send( String msg )
	{
		try
		{

			sender.writeUTF( msg );

			sender.flush();
			text.append("Client :: " + msg);
		}
		catch( Exception ex)
		{
			ex.printStackTrace();
		}
		finally
		{
			close();
		}

	}
	public void close()
	{
		try 
		{
			socket.close();
			sender.close();
			receiver.close();
		}
		catch (Exception ex) 
		{
			ex.printStackTrace();
		}
	}  
}

-----------------------------------------------------------------------------------------------------------------------------------

ثانيا // الأكواد الخاصة ب Server

Server

public class Messanger extends javax.swing.JFrame {

	/** Creates new form Messanger */

	Chatting_Service cs;
	public Messanger() {
		initComponents();

	}

	/** This method is called from within the constructor to
	 * initialize the form.
	 * WARNING: Do NOT modify this code. The content of this method is
	 * always regenerated by the Form Editor.
	 */
	// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
	private void initComponents() {

		jScrollPane1 = new javax.swing.JScrollPane();
		showing_textarea = new javax.swing.JTextArea();
		jToolBar1 = new javax.swing.JToolBar();
		chatting_textfiled = new javax.swing.JTextField();
		send_button = new javax.swing.JButton();
		exit_button = new javax.swing.JButton();

		setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

		showing_textarea.setColumns(20);
		showing_textarea.setRows(5);
		jScrollPane1.setViewportView(showing_textarea);

		jToolBar1.setRollover(true);
		jToolBar1.setEnabled(false);

		chatting_textfiled.setFont(new java.awt.Font("Tahoma", 1, 11));
		chatting_textfiled.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent evt) {
				chatting_textfiledActionPerformed(evt);
			}
		});

		send_button.setText("Send");
		send_button.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent evt) {
				send_buttonActionPerformed(evt);
			}
		});

		exit_button.setText("Exit");
		exit_button.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent evt) {
				exit_buttonActionPerformed(evt);
			}
		});

		javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
		getContentPane().setLayout(layout);
		layout.setHorizontalGroup(
			layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
			.addGroup(layout.createSequentialGroup()
				.addContainerGap()
				.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
					.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
						.addComponent(chatting_textfiled, javax.swing.GroupLayout.DEFAULT_SIZE, 238, Short.MAX_VALUE)
						.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
						.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
							.addComponent(send_button, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
							.addComponent(exit_button, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
					.addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 307, Short.MAX_VALUE)
					.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 307, Short.MAX_VALUE))
				.addContainerGap())
		);
		layout.setVerticalGroup(
			layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
			.addGroup(layout.createSequentialGroup()
				.addContainerGap()
				.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 211, javax.swing.GroupLayout.PREFERRED_SIZE)
				.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
				.addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
				.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
				.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
					.addGroup(layout.createSequentialGroup()
						.addComponent(send_button)
						.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
						.addComponent(exit_button))
					.addComponent(chatting_textfiled, javax.swing.GroupLayout.DEFAULT_SIZE, 52, Short.MAX_VALUE))
				.addContainerGap())
		);

		pack();
	}// </editor-fold>//GEN-END:initComponents

	private void send_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_send_buttonActionPerformed
		cs.send( chatting_textfiled.getText() );
		chatting_textfiled.setText("");

	}//GEN-LAST:event_send_buttonActionPerformed

	private void exit_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exit_buttonActionPerformed
		System.exit(0);
	}//GEN-LAST:event_exit_buttonActionPerformed

	private void chatting_textfiledActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chatting_textfiledActionPerformed
		cs.send( chatting_textfiled.getText() );
		chatting_textfiled.setText("");
	}//GEN-LAST:event_chatting_textfiledActionPerformed

	/**
	 * @param args the command line arguments
	 */
	public static void main(String args[]) {
	  //  java.awt.EventQueue.invokeLater(new Runnable() {
		//	public void run() {
				new Messanger().setVisible(true);
				new Messanger().cs = new Chatting_Service ( new Messanger().showing_textarea );
		  //  }
	   // });
	}

	// Variables declaration - do not modify//GEN-BEGIN:variables
	private javax.swing.JTextField chatting_textfiled;
	private javax.swing.JButton exit_button;
	private javax.swing.JScrollPane jScrollPane1;
	private javax.swing.JToolBar jToolBar1;
	private javax.swing.JButton send_button;
	private javax.swing.JTextArea showing_textarea;
	// End of variables declaration//GEN-END:variables

}

Chatting_Service

import java.io.*;
import java.net.*;
import javax.swing.JTextArea;


public class Chatting_Service 
{
	ServerSocket server_socket;
	Socket socket;
	DataOutputStream sender;
	DataInputStream receiver;
	JTextArea text;

	public Chatting_Service ( JTextArea text )
	{
		this.text = text;
		try
		{
			server_socket = new ServerSocket( 12500 );
			prepares_stream();

		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
		finally
		{
			close();
		}
	}
	public void prepares_stream()throws Exception
	{
		socket = server_socket.accept();
		sender = new DataOutputStream( socket.getOutputStream() );
		receiver = new DataInputStream( socket.getInputStream() );

		String msg = receiver.readUTF();
		text.append("Server :: " + msg);
	}
	public void send( String msg )
	{
		try
		{
			sender.writeUTF( msg );
			sender.flush();
			text.append("Client :: " + msg);
		}
		catch( Exception ex)
		{
			ex.printStackTrace();
		}
		finally
		{
			close();
		}

	}
	public void close()
	{
		try 
		{
			socket.close();
			sender.close();
			receiver.close();
		}
		catch (Exception ex) 
		{
			ex.printStackTrace();
		}

	}

}

المشكلة كانت عند الضغط على زر الإرسال , فإنه يحدث مشكلة , و لأكون صادق معك انا لا اعرف سبب هذه المشكلة حقيقة , ونتج عندي هذا Exception و الذي يتبين في الصورة التالية ..

/uploads/...-1208981678.jpg

بالنسبة لك أخي علاء , اقول جزاك الله خيرا على كل مجهود لك , وعلى كلامك المليء بالأمل , و أظن و الله أعلم انك من فلسطين مثلي , حيث منارة العلم الأولى في العالم العربي كما اعتبرها انا على الأقل.

تم تعديل هذه المشاركة بواسطة MKSoft في 27 أبريل 2008 في 23:21

مواضيع مشابهة