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

مشكلة فى برنامج شات بسيط

بدأه Ahmed Abd El-Rasoul في 8 مايو 2011 · 10 رد · 810 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

والله مش عارف الخطا ايه :wink:

لما بعمل run للسيرفر بيشتغل عادى وبعد كده بعمل run للزبون بيشتغل عادى

ولكن عندما ابعت اى شىء بيهنج :huh:

كود السيرفر :

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * server.java
 *
 * Created on May 8, 2011, 7:55:16 PM
 */

package exp;

/**
 *
 * @author Home
 */
import java.io.*;
import java.net.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class server extends javax.swing.JFrame {

    ServerSocket server;
    Socket socket;
    DataInputStream in;
    DataOutputStream out;


    /** Creates new form server */


    public server() {
          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.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        jTextField1 = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowOpened(java.awt.event.WindowEvent evt) {
                formWindowOpened(evt);
            }
        });

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

        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jLabel1.setText("server");

        jLabel2.setText("jLabel2");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 369, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 302, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(jButton1))))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(169, 169, 169)
                        .addComponent(jLabel1))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(30, 30, 30)
                        .addComponent(jLabel2)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 198, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel2)
                .addContainerGap(12, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    public void conn(){
        try {
            server = new ServerSocket(5000);
            socket = server.accept();
            in = new DataInputStream(socket.getInputStream());
            out = new DataOutputStream(socket.getOutputStream());
            jLabel2.setText("connecting client ...");

        } catch (IOException ex) {
            Logger.getLogger(server.class.getName()).log(Level.SEVERE, null, ex);
        }


    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        try {
            // TODO add your handling code here:
            String s = jTextField1.getText();
            out.writeUTF(s);
            jTextArea1.setText("Ahmed said :" + s);
            jTextField1.requestFocus();
        } catch (IOException ex) {
            Logger.getLogger(server.class.getName()).log(Level.SEVERE, null, ex);
        }

    }                                        

    private void formWindowOpened(java.awt.event.WindowEvent evt) {                                  
        // TODO add your handling code here:
   conn();
    }                                 

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

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration                   

}

كود الزبون :

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * client.java
 *
 * Created on May 8, 2011, 7:55:21 PM
 */

package exp;

/**
 *
 * @author Home
 */
import java.awt.Color;
import java.io.*;
import java.net.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

public class client extends javax.swing.JFrame {

    Socket socket;
    DataInputStream in;
    PrintWriter out;


    /** Creates new form client */
    public client() {
        initComponents();
    }

    public void getConnection(){
        try {
            socket = new Socket("127.0.0.1", 5000);
            in=new DataInputStream(socket.getInputStream());
            out=new PrintWriter(socket.getOutputStream());

            jLabel2.setText("connecting ....");


        } catch (UnknownHostException ex) {
         //   Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);
         JOptionPane.showMessageDialog(null, ex.getMessage());
        } catch (IOException ex) {
            Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);
        }
    }


    private void  receivemessage(){
        try {
            jTextArea1.setForeground(Color.blue);
            String s = in.readLine();

            if(s.length() > 1){
            jTextArea1.append("mostafa said :"+s);
            }

        } catch (IOException ex) {
          //  Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);
        JOptionPane.showMessageDialog(null, ex.getMessage());

        }


    }
    /** 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.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jTextField1 = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                formMouseClicked(evt);
            }
        });
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowOpened(java.awt.event.WindowEvent evt) {
                formWindowOpened(evt);
            }
        });

        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

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

        jLabel1.setText("client");

        jLabel2.setText("jLabel2");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 369, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 302, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(jButton1))
                            .addGroup(layout.createSequentialGroup()
                                .addGap(10, 10, 10)
                                .addComponent(jLabel2))))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(178, 178, 178)
                        .addComponent(jLabel1)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(13, 13, 13)
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 190, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jLabel2)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    private void formMouseClicked(java.awt.event.MouseEvent evt) {                                  
        // TODO add your handling code here:
       // receivemessage();
    }                                 

    private void formWindowOpened(java.awt.event.WindowEvent evt) {                                  
        // TODO add your handling code here:
     //   getConnection();
    }                                 

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        try {
            // TODO add your handling code here:
            //  getConnection();
            // receivemessage();
            socket = new Socket("127.0.0.1", 5000);
            in = new DataInputStream(socket.getInputStream());
            out = new PrintWriter(socket.getOutputStream());
            jLabel2.setText("connecting ....");
            jTextArea1.setForeground(Color.blue);
            String s = in.readLine();

            if(s.length() > 1){
            jTextArea1.append("mostafa said :"+s);
            }

        } catch (UnknownHostException ex) {
            Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);
        }




    }                                        

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

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration                   

}

التطبيق بالمرفقات Networking.rar

سأل الممكن المستحيل : أين تقيم ؟ فأجابه في أحلام العاجز

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

نمضى النصف الأول من حياتنا بحثاً عن المال والنجاح والشهرة ونمضى

النصف الثانى منها بحثاً عن الأطباء

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

شخصٌ يرى ذا الكون وهو جالسٌ ويجوب هذي الأرض بين الدول

#2

يعيطيك العافية اخى هاى المشكلة انو انتا مش مستخدم Thread

لازمك تستخدم ثرد لكل زبون بتصل بالسيرفر عشان ما ينهج

ان شاء الله اكون افدتك

#3

الف شكر على ردك

بس انا عامل سيرفر واحد وزبون واحد فقط لا احتاج الى Thread هنا :wink:

سأل الممكن المستحيل : أين تقيم ؟ فأجابه في أحلام العاجز

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

نمضى النصف الأول من حياتنا بحثاً عن المال والنجاح والشهرة ونمضى

النصف الثانى منها بحثاً عن الأطباء

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

شخصٌ يرى ذا الكون وهو جالسٌ ويجوب هذي الأرض بين الدول

#4

يجب ان تتم عملية التراسل في Thread

لتجنب ال Blocking

حيث هذه الجملة في جانب ال Client

String s = in.readLine();

تقوم ب Blocking لل UI

----

في جانب ال Server:

socket = server.accept();

ايضا تقوم كما وضحت مسبقا.

Blocking: بمعنى انه لا يتم تنفيذ ما بعد الدالة الا بعد حدوث شيء معين، مثل قرأة Byte[] او حدوث اتصال من مستخدم

تم تعديل هذه المشاركة بواسطة .S.T.A.L.K.E.R في 9 مايو 2011 في 20:08

1
#5

لازم الكلينت و السيرفر يعملو نفس الاكشن عشان كدا بيهنج معاك

عندي نفس المشكله برضو للاسف :blush:

#6

طيب انا جربت كتير وبرضوى مش نافع ياريت يا جماعة اى حد يعمله ويرفعه :huh:

سأل الممكن المستحيل : أين تقيم ؟ فأجابه في أحلام العاجز

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

نمضى النصف الأول من حياتنا بحثاً عن المال والنجاح والشهرة ونمضى

النصف الثانى منها بحثاً عن الأطباء

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

شخصٌ يرى ذا الكون وهو جالسٌ ويجوب هذي الأرض بين الدول

#7

ممكن يفيدك هالرابط :

http://tmthudugala.blogspot.com/2008/01/java-rmi-chat-progarm-example.html

هو بالـ RMI ، وفيه Thread .. أتمنى يفيدك

تحياتي.

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

#8

جزاك الله خيرا يا ابو حميد

هاشوفه حالا وارد عليك :)

سأل الممكن المستحيل : أين تقيم ؟ فأجابه في أحلام العاجز

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

نمضى النصف الأول من حياتنا بحثاً عن المال والنجاح والشهرة ونمضى

النصف الثانى منها بحثاً عن الأطباء

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

شخصٌ يرى ذا الكون وهو جالسٌ ويجوب هذي الأرض بين الدول

#9

انا شوفت البرنامج وجربته

هو يعمل بس من طرف واحد

يعنى الزبون يرسل مثلا اسمه وترجعله

hello myname

انا عايز من كلا الطرفين شات عادى زى الياهو بس على بسيط

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

RMI.rar

سأل الممكن المستحيل : أين تقيم ؟ فأجابه في أحلام العاجز

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

نمضى النصف الأول من حياتنا بحثاً عن المال والنجاح والشهرة ونمضى

النصف الثانى منها بحثاً عن الأطباء

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

شخصٌ يرى ذا الكون وهو جالسٌ ويجوب هذي الأرض بين الدول

#10

اعمل له تكرار :)

ما تمر عليك ذي يابوحميد :wink:

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

#11

معلش يا احمد ايام امتحانات والواحد دماغه :wacko:

سأل الممكن المستحيل : أين تقيم ؟ فأجابه في أحلام العاجز

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

نمضى النصف الأول من حياتنا بحثاً عن المال والنجاح والشهرة ونمضى

النصف الثانى منها بحثاً عن الأطباء

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

شخصٌ يرى ذا الكون وهو جالسٌ ويجوب هذي الأرض بين الدول

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