السلام عليكم
تواجهني مشكلة اخواني في عملية الارسال و الاستقبال باستخدام Socket , حيث ينتج عندي NullPointerException أثناء الإرسال , لذلك ارجو منكم مساعدتي .. الكود في المرفقات ..
السلام عليكم
تواجهني مشكلة اخواني في عملية الارسال و الاستقبال باستخدام Socket , حيث ينتج عندي NullPointerException أثناء الإرسال , لذلك ارجو منكم مساعدتي .. الكود في المرفقات ..
معقول
There is no POSTS
لكي تحصل على أجوبة يا أخي
فصل في شرح مشكلتك
اعرض الأجزاء التي تعتقد أن المشكلة فيها وهكذا
لكن لا تتوقع أن تجد من سيبحث عن المشكلة ليحلها
لا تأخذ كلامي على محمل الإهانة
فأنا لا أقصدها
تحياتي
ولايهمك اخي علاء .. لكن حقيقة انا وضعت الكود حتى يرى الأعضاء المشكلة بأنفسهم , لأني لا أبالغ لو قلت اني انا لم افهم السبب الحقيقي للمشكلة بعد .
على العموم المشكلة هي ...
قمت بإنشاء برنامج chatting بسيط باستخدام Socket , وعندما يريد Client ان يرسل اي نص إلى Server أو العكس و الضغط Enter أو على زر الإرسال , فإنه ينتج NullPointerException , وهاهي صورة هذا الإستثناء .
المرفقات (البرنامج)
تم تعديل هذه المشاركة بواسطة MKSoft في 23 أبريل 2008 في 23:15
السلام عليكم
لقد قمت بالتعديل على شيفرتك أخي
وهذا برنامج المحادثة الخاص بالسيرفر
لاحظ أني وضعت تعليقات بجانب الأجزاء التي قمت بإضافتها وحذفها
/*
* 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
}أي استفسارات أنا جاهز بإذن الله
تحياتي
شكرا لك أخي علاء على المحاولة لكنها لم تنجح للأسف ...
أرجو منك أخي ان تجرب الكود بنفسك وترى النتائج , بعد إذنك طبعا .. :lol:
تحياتي للجميع
سامحني أخي علاء انا غلبتك معاي .. لكن ارجو منك ان تقوم بتحميل المرفقات و تجرب البرنامج عندك (لن يتطلب منك الأمر إلا بضع دقائق ) , حيث إذا نجح البرنامج عند تجريبك له , سيكون ذلك مؤشر على ان المشكلة ليست في البرنامج و إنما في جهازي , حيث قمت بعمل بعض التعديلات ... أرجو منك ذلك و لك جزيل الإخلاص والوفاء .
أخي MKSoft
لا تفهمني بشكل خاطئ
أنا أريد أن أساعدك
لكني لا أحب أن أضيع وقتي في البحث عن المشكلة التي تواجهك
بينما كان من الأفضل لي ولك أن أستغل الوقت في حل المشكلة
وأعوذ بالله أن يكون هذا كبر أو غرور
هذه الشيفرة الخاصة بك
وقد عدلتها بحيث فصلت الإستقبال عن الإرسال
في كل من الخادم والعميل
أي أسئلة أنا في الخدمة
تحياتي
بارك الله فيك أخي علاء على كل المساعدة لكن عندي استفسارين ..
اولا // انت قلت :-
اقتباسوقد عدلتها بحيث فصلت الإستقبال عن الإرسال
ماذا قصدت انت بهذه الجملة , اولم يكن الإرسال و الإستقبال مفصولين ؟؟؟؟!!!!
ثانيا // لقد أضفت 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();
}هذا بالضبط ما قصدته
هناك دوال تقوم بإيقاف البرنامج حتى تحصل على رد
منها readUTF
وأنا لا أستطيع أن أوقف عمل برنامجي لخاطر أي أحد
لذلك أفصل هذه الدوال في خيط مستقل
حتى لاتوقف عمل البرنامج
تحياتي
شكرا أخي علاء .. لقد استفدت منك كثيرا ....
و أريد أن أسألك هل بإمكاني ان انشأ مثلا لكل دالة Thread خاص بها ؟؟؟
لدي استفسار اخر اخي علاء ....
و سامحتي على تطفلي الزائد عليك , لكن نظرا لعلمك الجيد في البرمجة احب أن أستفيد منك .
في كتاب 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
}في الشبكات بشكل عام أخي
عملية الإرسال ليست مشكلة بأي حال من الأحوال
كل ما عليك أن تقوم بالإرسال
المشكلة تكمن في عملية الإستقبال
عملية الإستقبال لا تعلم متى ستصلها البيانات التي ستستقبلها
لهذا نقوم بفصلها عن الخيط الرئيسي لكي لا تقوم بإيقاف عمل البرنامج
لكن إذا كان لديك برنامج يعمل وفق خطة عمل معينة
بمعنى أنك تعلم أنه في الوقت الفلاني ستحصل على بيانات
فلا ضرر من الإنتظار
في الأغلب البرنامج الذي طرحته يندرج تحت هذا الموضوع
ملاحظة أخرى لو لم تقم بالفصل
فإنك ستلاحظ أن الواجهة GUI
تعمل بالكاد أو قد لا تعمل مطلقاً
وذلك لأن الخيط رئيسي قد تم حجبه block
حتى تصل بيانات جديدة
تحياتي
شكرا أخي علاء .. لقد استفدت منك كثيرا ....
و أريد أن أسألك هل بإمكاني ان انشأ مثلا لكل دالة Thread خاص بها ؟؟؟
لا أنصحك بهذا أخي
لأن هذه العملية تحتاج إلى وقت في بناء الخيط
بصراحة الموضوع يتبع مازاد عن حده انقلب ضده
تحياتي
alaadiaa كتب:لا أنصحك بهذا أخيلأن هذه العملية تحتاج إلى وقت في بناء الخيط
بصراحة الموضوع يتبع مازاد عن حده انقلب ضده
تحياتي
طيب شو الحل اخي علاء ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
الحل أن تتعرف على الدوال التي تتعامل معها
إن كانت إحداهم تقوم بعملية انتظار
أيضاً أي حلقات غير منتهية
تحياتي
ِكرا أخي علاء و الله استفدت منك كتيير بارك الله فيك .
أشكرك أخي jsp على محاولتك و بارك الله فيك.
هل من الممكن ارفاق الكود ككود للكلاينت والسيرفر مش ملف مرفق
اتمنى نشوف الكود وتقولنا وين المشكله بالضبط
بالنسبة لك أخي علاء , اقول جزاك الله خيرا على كل مجهود لك , وعلى كلامك المليء بالأمل , و أظن و الله أعلم انك من فلسطين مثلي , حيث منارة العلم الأولى في العالم العربي كما اعتبرها انا على الأقل.
اقتباسهل من الممكن ارفاق الكود ككود للكلاينت والسيرفر مش ملف مرفقاتمنى نشوف الكود وتقولنا وين المشكله بالضبط
بناء على طلبك أخي 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 و الذي يتبين في الصورة التالية ..
بالنسبة لك أخي علاء , اقول جزاك الله خيرا على كل مجهود لك , وعلى كلامك المليء بالأمل , و أظن و الله أعلم انك من فلسطين مثلي , حيث منارة العلم الأولى في العالم العربي كما اعتبرها انا على الأقل.
تم تعديل هذه المشاركة بواسطة MKSoft في 27 أبريل 2008 في 23:21