بســم الله الـرحمــن الرحيــم
يا جماعه انا عندي مشكلة وهي سويت برنامج
client and server على شكل شات والبرنامج مضبوط جدا ويستخدم socket ولكن نحتاج نغير عليه ونطوره بشكل جيد فهل من مساعد لتغيير الية البرنامج
اولا عندي ملفين الاول sever والثاني client / الاول يسجل كل الرسائل الخارجة والواردة وهو لتسجيل المعلومات اما الثاني فهو كود جميل استخدمت فيه thread حتى اتمكن من تنفيذ البرنامج اكثر مرة وعند تنفيذ البرنامج 3 مرات كل واحد من هذه البرامج يكون السيرفر في حالة الارسال الى البقية والكلاينت في حالة الاستقبال من البرامج الاخرى يعني يعمل Broadcast
اذا امكن مساعدتي بتغيير الكود بحيث يتضمن مصفوفة يحتوي على عدد من العناصر المحددة وعندما يقوم البرنامج الاول بسؤال البرنامجين الاخريين هل عندك في مصفوفتك رقم معين حيث يقوم الجهاز الاخر بالرد التلقائي Auto Response بانه يوجد عند اولا يوجد عندي ويتم الرد خلال وقت محدد للرسالة المرسلة وهي مثلا 3 ثواني واذا لم يرد السيرفر يقطع socket
----------------------=============
هذا هو الكود ياريت تغيروا وتلعبو فيه >>>>>>>>>>>> الكود في المرفقات
----------------------=============
import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
import java.awt.event.*;
public class Chat extends JFrame
{
Container conti;
JButton b1,b2,b3;
JTextField tex1,tex2;
JTextArea texArea;
JLabel leb1,leb2,leb3;
int serverPort = 1234;
JPanel p1,p2,p3;
DatagramSocket socket;
Font font;
String name[] = new String[100]; //Max number of client in my chat,each num is client
String myname;
int counter=0;
public Chat()
{
super("Chat send data");
conti = getContentPane();
conti.setLayout(new BorderLayout());
font = new Font("Arial",Font.BOLD,15);
p1 = new JPanel();
p2 = new JPanel();
p3 = new JPanel();
//------ Create Socket
try
{
socket = new DatagramSocket();
}
catch( SocketException socketException )
{
socketException.printStackTrace();
System.exit( 1 );
}
///////Declerations of all Buttons
b1 = new JButton("Enter Chattt!");
b2 = new JButton("Send Message");
b3 = new JButton("EXIT");
///////Action Handling for all button
RegAddDeletClasHandler handler = new RegAddDeletClasHandler();
b1.addActionListener(handler);
b2.addActionListener(handler);
b3.addActionListener(handler);
//------- Fields 1 for enter neck name
leb1 = new JLabel("Enter The Neck name!");
leb1.setFont(new Font("Arial",Font.BOLD,17));
p1.add(leb1);
tex1 = new JTextField(20);
p1.add(tex1);
p1.add(b1);
conti.add(p1,BorderLayout.NORTH);
//-------
//------- Fields 2 for output name & Content
leb2 = new JLabel();
leb2.setFont(font);
p2.add(leb2);
texArea = new JTextArea(20,30);
texArea.setFont(font);
texArea.setEditable(false);
p2.add(new JScrollPane(texArea));
conti.add(p2,BorderLayout.CENTER);
//-------
//------- Fields 3 for sends Messages & exits
tex2 = new JTextField(30);
p3.add(tex2);
p3.add(b2);
p3.add(b3);
conti.add(p3,BorderLayout.SOUTH);
//-------
setSize(650,500);
setVisible(true);
} //end Constructor
private void waitforpacket()
{
// wait packet form server and play it
while(true) //always check for recive packet
{
try
{
byte buffer[] = new byte[ 1000 ];
DatagramPacket recivepacket = new DatagramPacket(buffer,buffer.length);
socket.receive(recivepacket);
DisplayMessage("\n"+ new String(recivepacket.getData(),0,recivepacket.getLength()).trim() +"\n");
}
catch( IOException ioException )
{
ioException.printStackTrace();
}
} // end while
} // end method
private void DisplayMessage( final String messagetodisplay )
{
SwingUtilities.invokeLater ( new Runnable()
{
public void run() // update display
{
texArea.append(messagetodisplay);
}
} );
} // end method
private class RegAddDeletClasHandler implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
if(event.getSource() == b1)
{
if(tex1.getText().equals(""))
{
JOptionPane.showMessageDialog( null,"You Don't Insert Neck name");
}
else
{
myname=tex1.getText();
leb2.setText("Welcome Mr/Ms [ "+myname+" ] ");
b3.setEnabled(true);
name[counter]=myname;
try
{
String messageReg = "1"+myname;
byte m[] = messageReg.getBytes();
DatagramPacket sendPacket = new DatagramPacket( m,
m.length, InetAddress.getLocalHost(), 1234 );
socket.send( sendPacket ); // send packet
for(int i=0; i<m.length; i++)
{
System.out.println(m);
}
}
catch ( IOException ioException )
{
ioException.printStackTrace();
}
counter++; // increment for new Regester
//b2.setEditable(true);
}
} // end if button 1
if(event.getSource() == b2)
{
if(tex2.getText().equals(""))
{
JOptionPane.showMessageDialog(null,"You Don't Write any thing ");
}
else
{
try
{
String message=new String("2"+name[counter-1]+" >>> "+tex2.getText());
byte m[] = message.getBytes();
DatagramPacket sendPacket = new DatagramPacket( m,
m.length, InetAddress.getLocalHost(), 1234 );
socket.send( sendPacket ); // send packet
tex2.setText("");
}
catch ( IOException ioException )
{
ioException.printStackTrace();
}
}
} // end if button 2
if(event.getSource() == b3)
{
try
{
String message=new String("3"+myname);
byte m[] = message.getBytes();
DatagramPacket sendPacket = new DatagramPacket( m,
m.length, InetAddress.getLocalHost(), 1234 );
socket.send( sendPacket ); // send packet
}
catch ( IOException ioException )
{
ioException.printStackTrace();
}
System.exit(0);//end the inteface of client who want to exit
}
}
} // end class handler
public static void main(String arg[])
{
Chat obj = new Chat();
obj.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
obj.waitforpacket();
}
}// end class chat
