سلام للجميع
انا هنا يا جماعة كاتب كلاسين
لتنفيذ برنامج شات (chat)صغير و بسيط
كلاس خاص بال server
و خلاص خاص بال client
بس مش عارف ازاى اربط الكلاسين ببعض
ياريت أى حد يقولى الطريقة
و أدى هنا كلاس الserver
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.EOFException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class ServerClass extends JFrame {
private JTextField enterField;
private JTextArea displayArea;
private ServerSocket server;
private int counter = 1;
private Socket connection;
private ObjectOutputStream output;
private ObjectInputStream input;
public ServerClass() {
super("server");
enterField = new JTextField();
enterField.setEditable(false);
enterField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
sendData(e.getActionCommand());
enterField.setText("");
}
});
getContentPane().add(enterField, BorderLayout.NORTH);
displayArea = new JTextArea();
getContentPane().add(new JScrollPane(displayArea), BorderLayout.CENTER);
}
public void runServer() {
try {
while (true) {
try {
server = new ServerSocket(12345, 100);
waitForConnection();
getStreams();
processConnection();
} catch (EOFException eof) {
System.err.println("server terminated connection");
} finally {
closeConnection();
++counter;
}
}
} catch (IOException ioE) {
ioE.printStackTrace();
}
}
private void waitForConnection() throws IOException {
displayMessage("waiting for connection\n");
connection = server.accept();
displayMessage("Connection" + counter + "received from:" + connection.getInetAddress().getHostName());
}
private void getStreams() throws IOException {
output = new ObjectOutputStream(connection.getOutputStream());
output.flush();
input = new ObjectInputStream(connection.getInputStream());
displayMessage("\nGot I/O stream ");
}
private void processConnection() throws IOException {
String message = "Conncetion successful";
sendData(message);
setTextFieldEditable(true);
do {
try {
message = (String) input.readObject();
displayMessage("\n" + message);
} catch (ClassNotFoundException classnotfounexception) {
displayMessage("\nUnknwon object type received");
}
} while (!message.equals("CLIENT>>TERMINATE"));
}
private void closeConnection() {
displayMessage("\nTerminating conection\n");
setTextFieldEditable(false);
try {
output.close();
input.close();
connection.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
private void sendData(String message) {
try {
output.writeObject("Server>> " + message);
output.flush();
displayMessage("\nServer>> " + message);
} catch (IOException ioe) {
displayArea.append("\nError writing object");
}
}
private void displayMessage(final String messageTodisplay) {
displayArea.append(messageTodisplay);
displayArea.setCaretPosition(displayArea.getText().length());
}
private void setTextFieldEditable(final boolean editable) {
enterField.setEditable(editable);
}
public static void main(String[] args) {
ServerClass application = new ServerClass();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
application.setSize(300, 150);
application.setLocationRelativeTo(null);
application.setEnabled(true);
application.runServer();
}
}
و أدى كلاس ال client
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.EOFException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class ClientClass extends JFrame {
private JTextField enterField;
private JTextArea displayArea;
private ObjectOutputStream output;
private ObjectInputStream input;
private String message = "";
private String chatServer;
private Socket client;
public ClientClass(String host) {
super("client");
chatServer = host;
enterField = new JTextField();
enterField.setEditable(false);
enterField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
sendData(e.getActionCommand());
enterField.setText("");
}
});
getContentPane().add(enterField, BorderLayout.NORTH);
displayArea = new JTextArea();
getContentPane().add(new JScrollPane(displayArea), BorderLayout.CENTER);
}
private void runClient() {
try {
connectToserver();
getStream();
processConnection();
} catch (EOFException eof) {
System.err.println("Client terminated connection");
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
closeConnection();
}
}
private void connectToserver() throws IOException {
displayMessage("Attempting connection");
client = new Socket(InetAddress.getByName(chatServer), 12345);
displayMessage("Connected to:" + client.getInetAddress().getCanonicalHostName());
}
private void getStream() throws IOException {
output = new ObjectOutputStream(client.getOutputStream());
output.flush();
input = new ObjectInputStream(client.getInputStream());
displayMessage("\nGot I/O stream\n");
}
private void processConnection() throws IOException {
String message = "Conncetion successful";
sendData(message);
setTextFieldEditable(true);
do {
try {
message = (String) input.readObject();
displayMessage("\n" + message);
} catch (ClassNotFoundException classnotfounexception) {
displayMessage("\nUnknwon object type received");
}
} while (!message.equals("CLIENT>>TERMINATE"));
}
private void closeConnection() {
displayMessage("\nTerminating conection\n");
setTextFieldEditable(false);
try {
output.close();
input.close();
client.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
private void sendData(String message) {
try {
output.writeObject("\nclient>> " + message);
output.flush();
displayMessage("\nclient>> " + message);
} catch (IOException ioe) {
displayArea.append("\nError writing object");
}
}
private void displayMessage(final String messageTodisplay) {
displayArea.append(messageTodisplay);
displayArea.setCaretPosition(displayArea.getText().length());
}
private void setTextFieldEditable(final boolean editable) {
enterField.setEditable(editable);
}
public static void main(String[] args) {
ClientClass application ;
if(args.length==0)
application=new ClientClass("127.0.0.1");
else
application=new ClientClass(args[0]);
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
application.setSize(300, 150);
application.setLocationRelativeTo(null);
application.setEnabled(true);
application.runClient();
}
}
بس انا مشكلتى هنا مش عارف ازاى
اربط بين الكرسين و اشغلههم
و تظهر شاشة ال client
و شاشة السيرفير
شكرا
بيشوى عاطف
كلاس السيرفير
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.EOFException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class ServerClass extends JFrame {
private JTextField enterField;
private JTextArea displayArea;
private ServerSocket server;
private int counter = 1;
private Socket connection;
private ObjectOutputStream output;
private ObjectInputStream input;
public ServerClass() {
super("server");
enterField = new JTextField();
enterField.setEditable(false);
enterField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
sendData(e.getActionCommand());
enterField.setText("");
}
});
getContentPane().add(enterField, BorderLayout.NORTH);
displayArea = new JTextArea();
getContentPane().add(new JScrollPane(displayArea), BorderLayout.CENTER);
}
public void runServer() {
try {
while (true) {
try {
server = new ServerSocket(12345, 100);
waitForConnection();
getStreams();
processConnection();
} catch (EOFException eof) {
System.err.println("server terminated connection");
} finally {
closeConnection();
++counter;
}
}
} catch (IOException ioE) {
ioE.printStackTrace();
}
}
private void waitForConnection() throws IOException {
displayMessage("waiting for connection\n");
connection = server.accept();
displayMessage("Connection" + counter + "received from:" + connection.getInetAddress().getHostName());
}
private void getStreams() throws IOException {
output = new ObjectOutputStream(connection.getOutputStream());
output.flush();
input = new ObjectInputStream(connection.getInputStream());
displayMessage("\nGot I/O stream ");
}
private void processConnection() throws IOException {
String message = "Conncetion successful";
sendData(message);
setTextFieldEditable(true);
do {
try {
message = (String) input.readObject();
displayMessage("\n" + message);
} catch (ClassNotFoundException classnotfounexception) {
displayMessage("\nUnknwon object type received");
}
} while (!message.equals("CLIENT>>TERMINATE"));
}
private void closeConnection() {
displayMessage("\nTerminating conection\n");
setTextFieldEditable(false);
try {
output.close();
input.close();
connection.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
private void sendData(String message) {
try {
output.writeObject("Server>> " + message);
output.flush();
displayMessage("\nServer>> " + message);
} catch (IOException ioe) {
displayArea.append("\nError writing object");
}
}
private void displayMessage(final String messageTodisplay) {
displayArea.append(messageTodisplay);
displayArea.setCaretPosition(displayArea.getText().length());
}
private void setTextFieldEditable(final boolean editable) {
enterField.setEditable(editable);
}
public static void main(String[] args) {
ServerClass application = new ServerClass();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
application.setSize(300, 150);
application.setLocationRelativeTo(null);
application.setEnabled(true);
application.runServer();
}
}كلاس ال client
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.EOFException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class ClientClass extends JFrame {
private JTextField enterField;
private JTextArea displayArea;
private ObjectOutputStream output;
private ObjectInputStream input;
private String message = "";
private String chatServer;
private Socket client;
public ClientClass(String host) {
super("client");
chatServer = host;
enterField = new JTextField();
enterField.setEditable(false);
enterField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
sendData(e.getActionCommand());
enterField.setText("");
}
});
getContentPane().add(enterField, BorderLayout.NORTH);
displayArea = new JTextArea();
getContentPane().add(new JScrollPane(displayArea), BorderLayout.CENTER);
}
private void runClient() {
try {
connectToserver();
getStream();
processConnection();
} catch (EOFException eof) {
System.err.println("Client terminated connection");
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
closeConnection();
}
}
private void connectToserver() throws IOException {
displayMessage("Attempting connection");
client = new Socket(InetAddress.getByName(chatServer), 12345);
displayMessage("Connected to:" + client.getInetAddress().getCanonicalHostName());
}
private void getStream() throws IOException {
output = new ObjectOutputStream(client.getOutputStream());
output.flush();
input = new ObjectInputStream(client.getInputStream());
displayMessage("\nGot I/O stream\n");
}
private void processConnection() throws IOException {
String message = "Conncetion successful";
sendData(message);
setTextFieldEditable(true);
do {
try {
message = (String) input.readObject();
displayMessage("\n" + message);
} catch (ClassNotFoundException classnotfounexception) {
displayMessage("\nUnknwon object type received");
}
} while (!message.equals("CLIENT>>TERMINATE"));
}
private void closeConnection() {
displayMessage("\nTerminating conection\n");
setTextFieldEditable(false);
try {
output.close();
input.close();
client.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
private void sendData(String message) {
try {
output.writeObject("\nclient>> " + message);
output.flush();
displayMessage("\nclient>> " + message);
} catch (IOException ioe) {
displayArea.append("\nError writing object");
}
}
private void displayMessage(final String messageTodisplay) {
displayArea.append(messageTodisplay);
displayArea.setCaretPosition(displayArea.getText().length());
}
private void setTextFieldEditable(final boolean editable) {
enterField.setEditable(editable);
}
public static void main(String[] args) {
ClientClass application;
if(args.length==0)
application=new ClientClass("127.0.0.1");
else
application=new ClientClass(args[0]);
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
application.setSize(300, 150);
application.setLocationRelativeTo(null);
application.setEnabled(true);
application.runClient();
}
}معلش انا وضعتهم تانى عشان شكل الكود لم يكون مظبوط فى المشاركة الأولى
