Source Code:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author seroja
*/
public class MainFrame extends javax.swing.JFrame implements Runnable {
Socket client_socket;
ServerSocket server_socket;
BufferedReader server_reader, client_reader;
BufferedWriter server_writer, client_writer;
private void client_connection() {
try {
String server_ip = JOptionPane.showInputDialog("Input Server IP ");
if(server_ip == null) server_ip = "127.0.0.1";
jComboBoxMode.setEnabled(false);
jButtonConnect.setText("Disconnect");
client_socket = new Socket(server_ip, 8000);
server_reader = new BufferedReader(new InputStreamReader(client_socket.getInputStream()));
server_writer = new BufferedWriter(new OutputStreamWriter(client_socket.getOutputStream()));
} catch (UnknownHostException ex) {
System.out.println("Connection Refused !");
System.exit(-1);
} catch (IOException ex) {
Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void read_connection() {
try {
try {
try {
server_socket = new ServerSocket(8000);
this.setTitle("Waitting Client...");
} catch (IOException ex) {
System.out.println("Could not listen !");
System.exit(-1);
}
client_socket = server_socket.accept();
client_socket.getChannel().configureBlocking(false);
if(client_socket.isConnected()) {
this.setTitle("Connected " + client_socket.getInetAddress());
}else {
this.setTitle("Disconnect");
}
} catch (IOException ex) {
System.out.println("Connection Failed, Cannot Accept by Server!");
System.exit(-1);
}
server_reader = new BufferedReader(new InputStreamReader(client_socket.getInputStream()));
server_writer = new BufferedWriter(new OutputStreamWriter(client_socket.getOutputStream()));
} catch (IOException ex) {
System.out.println("Read Failed");
System.exit(-1);
}
}
private void disconnected_by_client() {
try {
client_socket.close();
server_reader.close();
server_writer.close();
jComboBoxMode.setEnabled(true);
jButtonConnect.setText("Connect");
} catch (IOException ex) {
Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void disconnected_by_server() {
try {
jButtonConnect.setText("Off");
this.setTitle("Disconnected");
server_socket.close();
server_reader.close();
server_writer.close();
} catch (IOException ex) {
Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* Creates new form MainFrame
*/
public MainFrame() {
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() {
jPanel1 = new javax.swing.JPanel();
jComboBoxMode = new javax.swing.JComboBox();
jLabel1 = new javax.swing.JLabel();
jTextFieldNickName = new javax.swing.JTextField();
jButtonConnect = new javax.swing.JButton();
jPanel2 = new javax.swing.JPanel();
jButtonSend = new javax.swing.JButton();
jTextFieldMessage = new javax.swing.JTextField();
jListConversations = new java.awt.List();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setResizable(false);
jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Settings"));
jComboBoxMode.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Server", "Client" }));
jComboBoxMode.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
jComboBoxModeItemStateChanged(evt);
}
});
jLabel1.setText("Nickname");
jTextFieldNickName.setEditable(false);
jTextFieldNickName.setText("Server");
jButtonConnect.setText("On");
jButtonConnect.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonConnectActionPerformed(evt);
}
});
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTextFieldNickName))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jComboBoxMode, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButtonConnect, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jComboBoxMode, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButtonConnect))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(jTextFieldNickName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Conversation"));
jButtonSend.setText("Send");
jButtonSend.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonSendActionPerformed(evt);
}
});
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jListConversations, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(jPanel2Layout.createSequentialGroup()
.addComponent(jTextFieldMessage, javax.swing.GroupLayout.PREFERRED_SIZE, 123, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButtonSend, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 0, Short.MAX_VALUE)))
.addContainerGap())
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jListConversations, javax.swing.GroupLayout.DEFAULT_SIZE, 93, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jTextFieldMessage, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButtonSend))
.addContainerGap())
);
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, false)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
private void jComboBoxModeItemStateChanged(java.awt.event.ItemEvent evt) {
if(jComboBoxMode.getSelectedItem().equals("Server")) {
jButtonConnect.setText("On");
jTextFieldNickName.setText("Server");
}else {
jButtonConnect.setText("Connect");
jTextFieldNickName.setText("Client");
}
}
private void jButtonConnectActionPerformed(java.awt.event.ActionEvent evt) {
if(jButtonConnect.getText().equals("Connect")) {
jButtonConnect.setText("Disconnect");
client_connection();
Thread thread = new Thread(this);
thread.start();
}else if(jButtonConnect.getText().equals("On")){
jButtonConnect.setText("Off");
read_connection();
Thread thread = new Thread(this);
thread.start();
}else if(jButtonConnect.getText().equals("Disconnect")) {
jButtonConnect.setText("On");
disconnected_by_client();
}else if(jButtonConnect.getText().equals("Off")) {
disconnected_by_server();
}
}
private void jButtonSendActionPerformed(java.awt.event.ActionEvent evt) {
try {
server_writer.write(jTextFieldNickName.getText() + ": " + jTextFieldMessage.getText());
server_writer.newLine();
server_writer.flush();
} catch (IOException ex) {
Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
}
jListConversations.add("me: " + jTextFieldMessage.getText());
jTextFieldMessage.setText("");
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception e) {
System.out.println("Nimbus isn't available");
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MainFrame().setVisible(true);
new MainFrame().setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButtonConnect;
private javax.swing.JButton jButtonSend;
private javax.swing.JComboBox jComboBoxMode;
private javax.swing.JLabel jLabel1;
private java.awt.List jListConversations;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JTextField jTextFieldMessage;
private javax.swing.JTextField jTextFieldNickName;
// End of variables declaration
@Override
public void run() {
while(true){
try {
jListConversations.add(server_reader.readLine());
} catch (IOException ex) {
Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
0 komentar:
Posting Komentar