منتدى مصر التقني
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

طلب مساعدة ببرنامج محادثة بين سيرفر وزبون عن طريق شاشة

اذهب الى الأسفل

طلب مساعدة ببرنامج محادثة بين سيرفر وزبون عن طريق شاشة  Empty طلب مساعدة ببرنامج محادثة بين سيرفر وزبون عن طريق شاشة

مُساهمة من طرف سامر الشرفا الأربعاء سبتمبر 11, 2013 9:48 am

السلام عليكم
أرجوا المساعدة ببرنامج محادثة بين سيرفر وزبون عن طريق شاشة

المشكلة انه بالبرامج العادية عند تنفيذ البرنامجين يصل كل برنامج الى جملة try .. catch
التان فيهما تعريف لل socket
علما ان الاتصال عن طريق ال TCP

ولكن وجود الشاشتين ووجود زر للاتصال جعل البرنامج لا يعمل ويؤدي الى تعليق الزر عن العمل

برنامج السيرفر : وهو موجود ببكيج يختلف عن الزبون :
الكود:
package server_sock;
import java.awt.Color;
import java.awt.Font;
import java.awt.*;
import java.awt.event.*;
import java.net.* ;
import java.io.* ;
import javax.swing.* ;

public class Server_Sock extends JFrame
{
    private static final long serialVersionUID = 1L;
    JLabel jlP ;
    JLabel jlS ;
    JLabel jlM ;
    JTextField jtP ;
    JTextField jtS ;
    JTextField jtM ;
    JTextArea TA_Messages ;
    JScrollPane jsp ;
    JButton jbCo ;
    JButton jbSe ;

    String HNa ;
    int PNu ;
    String rec ;
   
    ServerSocket ss ;
    Socket s ;
    ObjectOutputStream oos ;
    ObjectInputStream ois ;
   
    public Server_Sock()
    {

    jlP = new JLabel("Port Number : " , JLabel.CENTER);
    jlP.setForeground(Color.red);
    jlP.setFont(new Font("TimesRoman" , Font.BOLD , 20) );
   
    jtP = new JTextField(20);
    jtP.setForeground(Color.red);
    jtP.setFont(new Font("TimesRoman" , Font.BOLD , 20) );
    jtP.setHorizontalAlignment(JTextField.CENTER);

    jlS = new JLabel("The State : " , JLabel.CENTER);
    jlS.setForeground(Color.CYAN);
    jlS.setFont(new Font("TimesRoman" , Font.BOLD , 20) );
   
    jtS = new JTextField(20);
    jtS.setEnabled(false);
    jtS.setForeground(Color.CYAN);
    jtS.setFont(new Font("TimesRoman" , Font.BOLD , 20) );
    jtS.setHorizontalAlignment(JTextField.CENTER);

    jbCo = new JButton("CONNECTION");
    jbCo.setBackground(Color.green);
    jbCo.setForeground(Color.BLACK);
    jbCo.setFont(new Font("TimesRoman" , Font.BOLD , 20) );
   
    jbSe = new JButton("Send");
    jbSe.setBackground(Color.BLUE);
    jbSe.setForeground(Color.BLACK);
    jbSe.setFont(new Font("TimesRoman" , Font.BOLD , 20) );
   
    jlM = new JLabel("Message to Client :" , JLabel.CENTER);
    jlM.setForeground(Color.MAGENTA);
    jlM.setFont(new Font("TimesRoman" , Font.BOLD , 20) );
   
    jtM = new JTextField();
    jtM.setForeground(Color.MAGENTA);
    jtM.setFont(new Font("TimesRoman" , Font.BOLD , 15) );
    jtM.setHorizontalAlignment(JTextField.CENTER);
   
    TA_Messages = new JTextArea();
    jsp = new JScrollPane();
    jsp.setViewportView(TA_Messages);
    jsp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS) ;
    jsp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS) ;
   
    JPanel p1 = new JPanel() ;
    p1.setLayout(new GridLayout(3,2,10,10));
    p1.add(jlP);
    p1.add(jtP);
    p1.add(jlM);
    p1.add(jtM);
    p1.add(jlS);
    p1.add(jtS);
   
    JPanel p2 = new JPanel() ;
    p2.setLayout(new GridLayout(2,1,10,10));
    p2.add(p1);
    p2.add(jsp);
   
    JPanel p3 = new JPanel() ;
    p3.setLayout(new BorderLayout(10,10));
    p3.add(p2 , BorderLayout.CENTER);
    p3.add(jbCo , BorderLayout.NORTH);
    p3.add(jbSe , BorderLayout.SOUTH);
    add(p3);
 
            int confirmed = JOptionPane.showConfirmDialog(null ,
            "Are you sure you want to run the Server ? " , "Confirm Run Server" ,
            JOptionPane.YES_NO_OPTION);
        if (confirmed == JOptionPane.YES_OPTION)
        {
            Connect() ;
        }
        if (confirmed == JOptionPane.NO_OPTION)
        {
            return ;
        }
 
   
    jbSe.addActionListener(new ActionListener()
    {
        @Override
        public void actionPerformed(ActionEvent ae)
        {
            try
            {
                rec = (String)ois.readObject();
                jtS.setText("Can recieve from Client ");
                TA_Messages.append( rec ) ;
            }
            catch(IOException e)
            {  jtS.setText("Can not recieve from Client : IOE"); }
            catch (ClassNotFoundException ex)
                { jtS.setText("Can not recieve from Client  : CNFE "); }
           
            try
            {   
                rec = jtM.getText().trim() ;
                oos.writeObject(rec) ;
                jtS.setText("Can Send to Client ");
            }
            catch(IOException e)
            {  jtS.setText("Can not Send to Client : IOE"); }
           
        }
    }
            );
         
               
    }// end constructor
   
    public void Connect()
    {
        jbCo.addActionListener(new ActionListener()
    {
        @Override
        public void actionPerformed(ActionEvent ae)
        {
                try
                {
                PNu = Integer.parseInt(jtP.getText().trim()) ;
                ss = new ServerSocket(PNu) ;
                s = ss.accept() ;
                jtS.setText("Connection with Client : E");
               
                ois = new ObjectInputStream(s.getInputStream()) ;
                oos = new ObjectOutputStream(s.getOutputStream()) ;
                }
                catch(Exception e)
                {  jtS.setText("NOT Connection with Client : E"); }
               
        }
    }
                );
    }

}
// end Server_Sock Class


ويتم استدعائها من خلال كلاس رئيسية :
الكود:
package server_sock;
import javax.swing.JFrame;

public class Main extends JFrame
{
    public static void main(String[] args)
    {
      Server_Sock cs = new Server_Sock();
      cs.setSize(500 , 600);
      cs.setTitle("Server");
      cs.setVisible(true);
      cs.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      cs.setLocation(900 , 0);
    }
}
// end Main Class

,..............................................................
كلاس ال client :
الكود:
package client_sock;
import java.awt.*;
import java.awt.event.*;
import java.net.* ;
import java.io.* ;
import javax.swing.* ;

public class Client_Sock extends JFrame
{
    private static final long serialVersionUID = 1L;
    JLabel jlP ;
    JLabel jlS ;
    JLabel jlM ;
    JTextField jtP ;
    JTextField jtS ;
    JTextField jtM ;
    JTextArea TA_Messages ;
    JScrollPane jsp ;
    JButton jbCo ;
    JButton jbSe ;
   
    String HNa ;
    int PNu ;
    String rec ;
   
    Socket s ;
    ObjectOutputStream oos ;
    ObjectInputStream ois ;
   
    public Client_Sock()
    {
       
    jlP = new JLabel("Port Number : " , JLabel.CENTER);
    jlP.setForeground(Color.red);
    jlP.setFont(new Font("TimesRoman" , Font.BOLD , 20) );
   
    jtP = new JTextField(20);
    jtP.setForeground(Color.red);
    jtP.setFont(new Font("TimesRoman" , Font.BOLD , 20) );
    jtP.setHorizontalAlignment(JTextField.CENTER);

    jlS = new JLabel("The State : " , JLabel.CENTER);
    jlS.setForeground(Color.CYAN);
    jlS.setFont(new Font("TimesRoman" , Font.BOLD , 20) );
   
    jtS = new JTextField(20);
    jtS.setEnabled(false);
    jtS.setForeground(Color.CYAN);
    jtS.setFont(new Font("TimesRoman" , Font.BOLD , 20) );
    jtS.setHorizontalAlignment(JTextField.CENTER);

    jbCo = new JButton("CONNECTION");
    jbCo.setBackground(Color.green);
    jbCo.setForeground(Color.BLACK);
    jbCo.setFont(new Font("TimesRoman" , Font.BOLD , 20) );
   
    jbSe = new JButton("Send");
    jbSe.setBackground(Color.BLUE);
    jbSe.setForeground(Color.BLACK);
    jbSe.setFont(new Font("TimesRoman" , Font.BOLD , 20) );
   
    jlM = new JLabel("Message to Client :" , JLabel.CENTER);
    jlM.setForeground(Color.MAGENTA);
    jlM.setFont(new Font("TimesRoman" , Font.BOLD , 20) );
   
    jtM = new JTextField();
    jtM.setForeground(Color.MAGENTA);
    jtM.setFont(new Font("TimesRoman" , Font.BOLD , 15) );
    jtM.setHorizontalAlignment(JTextField.CENTER);
   
    TA_Messages = new JTextArea();
    jsp = new JScrollPane();
    jsp.setViewportView(TA_Messages);
    jsp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS) ;
    jsp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS) ;
   
    JPanel p1 = new JPanel() ;
    p1.setLayout(new GridLayout(3,2,10,10));
    p1.add(jlP);
    p1.add(jtP);
    p1.add(jlM);
    p1.add(jtM);
    p1.add(jlS);
    p1.add(jtS);
   
    JPanel p2 = new JPanel() ;
    p2.setLayout(new GridLayout(2,1,10,10));
    p2.add(p1);
    p2.add(jsp);
   
    JPanel p3 = new JPanel() ;
    p3.setLayout(new BorderLayout(10,10));
    p3.add(p2 , BorderLayout.CENTER);
    p3.add(jbCo , BorderLayout.NORTH);
    p3.add(jbSe , BorderLayout.SOUTH);
   
    add(p3);
   
 
            int confirmed = JOptionPane.showConfirmDialog(null ,
            "Are you sure you want to run the Client ? " , "Confirm Run Client" ,
            JOptionPane.YES_NO_OPTION);
        if (confirmed == JOptionPane.YES_OPTION)
        {
            Connect() ;
        }
        if (confirmed == JOptionPane.NO_OPTION)
        {
            return ;
        }
 
    jbSe.addActionListener(new ActionListener()
    {
        @Override
        public void actionPerformed(ActionEvent ae)
        {
 
            try
            {         
                rec = jtM.getText().trim() ;
                oos.writeObject(rec) ;
                jtS.setText("Can Send to Server");
            }
            catch (IOException ex)
            { jtS.setText("Can not Send to Server : IOE "); }
           
                try
                {
                    rec = (String)ois.readObject();
                    jtS.setText("Can recieve from Server ");                 
                    TA_Messages.append( rec ) ;
                }
                catch (IOException ex)
                { jtS.setText("Can not recieve from Server  : IOE "); }
                catch (ClassNotFoundException ex)
                { jtS.setText("Can not recieve from  Server  : CNFE "); }
           
        }
    }
            );
         
    } // end constructor
   
    public void Connect()
    {
 
    jbCo.addActionListener(new ActionListener()
    {
       
        @Override
        public void actionPerformed(ActionEvent ae)
        {
            try
            {
            PNu = Integer.parseInt(jtP.getText().trim()) ;
            s = new Socket("localhost" , PNu) ;
            jtS.setText("Connection with Server");
           
            ois = new ObjectInputStream(s.getInputStream()) ;
            oos = new ObjectOutputStream(s.getOutputStream()) ;
            }
            catch(Exception e)
            {  jtS.setText("NOT Connection with Server : E "); }
        }
    }
            );
               
    }// end Connect methode         

}
// end Client_Sock Class

ويتم استدعائها من خلال الكلاس :
الكود:
package client_sock;
import javax.swing.* ;

public class Main extends JFrame
{
    public static void main(String[] args)
    {
        Client_Sock jf = new Client_Sock();
        jf.setVisible(true);
        jf.setTitle("Client");
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setSize(500 , 600);
        jf.setLocation(0 , 0);
    }
}
// end Main Class


أرجوا
المساعد
وشكرا جزيلا 
Smile cheers study
سامر الشرفا
سامر الشرفا
..
..

تاريخ التسجيل : 01/09/2013
المساهمات : 19
النقاط : 25
التقيم : 0
الدولة : فلسطين
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

طلب مساعدة ببرنامج محادثة بين سيرفر وزبون عن طريق شاشة  Empty رد: طلب مساعدة ببرنامج محادثة بين سيرفر وزبون عن طريق شاشة

مُساهمة من طرف سامر الشرفا الأربعاء سبتمبر 11, 2013 10:53 am

قمت بالتعديل على البرنامج وارجاعه كما كان سابقا
وذلك بحذف الدالة Connect() من البرنامجين
وارجاع عملية الضغط على زر الاتصال الى ما قبل زر الارسال
Smile Smile 
سامر الشرفا
سامر الشرفا
..
..

تاريخ التسجيل : 01/09/2013
المساهمات : 19
النقاط : 25
التقيم : 0
الدولة : فلسطين
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

طلب مساعدة ببرنامج محادثة بين سيرفر وزبون عن طريق شاشة  Empty رد: طلب مساعدة ببرنامج محادثة بين سيرفر وزبون عن طريق شاشة

مُساهمة من طرف السنى الأربعاء سبتمبر 11, 2013 11:26 am

سامر الشرفا كتب:
قمت بالتعديل على البرنامج وارجاعه كما كان سابقا
وذلك بحذف الدالة Connect() من البرنامجين
وارجاع عملية الضغط على زر الاتصال الى ما قبل زر الارسال
Smile Smile 
نفهم من ذلك ان المشكلة تم حلها
السنى
السنى
........
........

تاريخ التسجيل : 18/02/2011
المساهمات : 249
النقاط : 464
التقيم : 25
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

طلب مساعدة ببرنامج محادثة بين سيرفر وزبون عن طريق شاشة  Empty رد: طلب مساعدة ببرنامج محادثة بين سيرفر وزبون عن طريق شاشة

مُساهمة من طرف سامر الشرفا الأربعاء سبتمبر 11, 2013 12:54 pm

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

تاريخ التسجيل : 01/09/2013
المساهمات : 19
النقاط : 25
التقيم : 0
الدولة : فلسطين
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

ََ

مواضيع ذات صلة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى