Skip to content

Instantly share code, notes, and snippets.

@ahmetkakici
Created September 27, 2013 17:07
Show Gist options
  • Save ahmetkakici/6731784 to your computer and use it in GitHub Desktop.
Save ahmetkakici/6731784 to your computer and use it in GitHub Desktop.
Blog
/**
*
* @author Ahmet
*/
import java.io.*;
import java.net.*;
import java.util.*;
public class clientMsgHandler extends Thread {
private DatagramSocket socket;
private DatagramPacket giden;
private DatagramPacket gelen;
private InetAddress address;
private int msgType;
private String received;
private String[] parsedMsg;
public String myName;
public String message;
public String receiverName;
public String senderName;
private static final int PORT = 4444;
private static final String MSG_SEPERATOR = ">";
private static final int ADD_ME = 0;
private static final int REMOVE_ME = 1;
private static final int SEND_MSG = 2;
private static final int GET_USERS = 3;
private static final int ACK_MSG = 4;
public clientGUI parent;
public boolean connected = false;
public String hostname;
public String msg2send;
public Vector clients = new Vector();
public clientMsgHandler(String argHostname) throws IOException {
hostname = argHostname;
address = InetAddress.getByName(hostname);
socket = new DatagramSocket();
socket.setSoTimeout(0);
}
@
Override
public void run() {
while (true) {
try {
Recieve();
socket.setSoTimeout(0);
} catch (Exception e) {}
}
}
public void SetHost(String argHostname) throws UnknownHostException {
hostname = argHostname;
address = InetAddress.getByName(hostname);
}
private void Send() {
byte[] buf = new byte[msg2send.length()];
buf = msg2send.getBytes();
giden = new DatagramPacket(buf, buf.length, address, PORT);
try {
socket.send(giden);
} catch (Exception e) {}
System.out.println("Giden mesaj: " + msg2send);
}
public void Recieve() {
byte[] buf = new byte[256];
gelen = new DatagramPacket(buf, buf.length);
try {
socket.receive(gelen);
} catch (Exception e) {}
received = new String(gelen.getData(), 0, gelen.getLength());
System.out.println("Gelen mesaj: " + received);
ParseMsg();
HandleMsg();
}
private void BuildMsg(int argFlag) {
msg2send = myName + MSG_SEPERATOR + receiverName + MSG_SEPERATOR + argFlag + MSG_SEPERATOR + message;
}
public void SendMsg() {
BuildMsg(SEND_MSG);
Send();
}
public void ParseMsg() {
try {
parsedMsg = received.split(MSG_SEPERATOR);
senderName = parsedMsg[0];
msgType = Integer.parseInt(parsedMsg[1]);
message = parsedMsg[2];
} catch (Exception exception) {
parent.SetStatus("Bağlantı kurulamadı.");
msgType = -1;
message = "";
}
}
public void Connect() {
try {
message = myName;
receiverName = "Server";
BuildMsg(ADD_ME);
Send();
socket.setSoTimeout(2000);
Recieve();
socket.setSoTimeout(0);
} catch (SocketException ex) {}
}
public void Disconnect() {
receiverName = "Server";
BuildMsg(REMOVE_ME);
Send();
connected = false;
}
public void HandleMsg() {
if (msgType == SEND_MSG) {
parent.AddMessage(message, senderName);
} else if (msgType == REMOVE_ME) {
RemoveClient(message);
parent.UpdateUserList();
} else if (msgType == ACK_MSG) {
connected = true;
} else if (msgType == ADD_ME) {
clients.add(message);
parent.UpdateUserList();
} else if (msgType == GET_USERS) {
String[] clientList = parsedMsg[2].split("\\|");
BuildClientList(clientList);
start();
}
}
public void GetClientList() {
message = myName;
BuildMsg(GET_USERS);
Send();
Recieve();
}
private void BuildClientList(String[] clientList) {
clients.removeAllElements();
for (int i = 0; i < clientList.length; i++) {
if (!myName.equalsIgnoreCase(clientList[i].toString()))
clients.add(clientList[i]);
}
}
private void RemoveClient(String argName) {
for (int i = 0; i < clients.size(); i++) {
String tmp = (String) clients.elementAt(i);
if (tmp.equals(argName)) {
clients.remove(i);
break;
}
}
}
}
import java.io.IOException;
/*
* clientGUI.java
*
* Created on 16 Nisan 2008 Çarşamba, 21:26
*/
import java.net.UnknownHostException;
import javax.swing.JOptionPane;
/**
*
* @author Ahmet
*/
public class clientGUI extends javax.swing.JApplet {
private clientMsgHandler tr;
private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {
// Kullanıcı adı girişi
Connect();
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// Bağlan butonu
Connect();
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// Gönderme işlemi
int selected = jList1.getSelectedIndex();
if (selected > -1)
SendMessage();
jTextField2.requestFocusInWindow();
}
private void jTextField2ActionPerformed(java.awt.event.ActionEvent evt) {
// Gönderme işlemi
int selected = jList1.getSelectedIndex();
if (selected > -1)
SendMessage();
}
private void jList1ValueChanged(javax.swing.event.ListSelectionEvent evt) {
// Listeden kişi seçildiğinde:
jTextField3.setText(jList1.getSelectedValue().toString());
jButton2.setEnabled(true);
}
private void jTextField1FocusGained(java.awt.event.FocusEvent evt) {
// Kullanıcı adı girişi
if (jTextField1.getText().equalsIgnoreCase("Kullanıcı Adı"))
jTextField1.setText("");
}
private void jTextField4FocusGained(java.awt.event.FocusEvent evt) {
// Server IP
if (jTextField4.getText().equalsIgnoreCase("Server IP"))
jTextField4.setText("");
}
public void SendMessage() {
tr.message = jTextField2.getText();
tr.receiverName = jList1.getSelectedValue().toString();
tr.SendMsg();
AddMessage(tr.message, tr.myName);
jTextField2.setText("");
}
public void AddMessage(String argMsg, String argSender) {
jTextArea1.append("\n" + argSender + ":" + argMsg);
}
public void UpdateUserList() {
jList1.removeAll();
jList1.setListData(tr.clients);
}
public void Connect() {
try {
tr.myName = jTextField1.getText();
tr.SetHost(jTextField4.getText());
tr.Connect();
if (tr.connected) {
jList1.setVisible(true);
jTextField2.setVisible(true);
jButton2.setVisible(true);
jTextField1.setEnabled(false);
jTextField4.setEnabled(false);
tr.GetClientList();
jList1.setListData(tr.clients);
jButton1.setEnabled(false);
SetStatus("Bağlantı Kuruldu");
}
} catch (UnknownHostException ex) {
}
}
public void SetStatus(String argMsg) {
jTextField3.setText(argMsg);
}
}
class ClientHandler extends Thread {
private static final int PORT = 4444;
private static final int BUFFER_LENGTH = 256;
private static final String MSG_SEPERATOR = ">";
private static final int ADD_ME = 0;
private static final int REMOVE_ME = 1;
private static final int SEND_MSG = 2;
private static final int GET_USERS = 3;
private static final int ACK_MSG = 4;
public Vector clients = new Vector();
protected DatagramSocket socket = null;
String receivedMsg; // Parse edilmemis mesaj
private String message; // Mesajin icerigi - yazi
private int msgType; // Mesaj turu
private String msg2send; // Gonderilecek mesaj
private SocketAddress receiverAdress; // Mesajin gidecegi adres
private SocketAddress senderAddress; // Mesajin geldigi adres
private String receiverName; // Mesajin gidecegi kisi
private String senderName; // Mesaj gonderen kisi
public ServerGUIView parent;
@
Override
public void run() {
while (true) {
try {
ServerReceive();
ParseMsg();
HandleMsg();
} catch (Exception e) {}
}
}
public ClientHandler() throws IOException {
super("ClientHandler");
socket = new DatagramSocket(PORT);
}
public void RemoveClient(String argName) {
for (int i = 0; i < clients.size(); i++) {
Client tmp = (Client) clients.get(i);
if (tmp.clientName.equals(argName)) {
clients.remove(i);
break;
}
}
}
public void GetReceiverAddressByName() {
for (int i = 0; i < clients.size(); i++) {
Client tmp = (Client) clients.get(i);
if (tmp.clientName.equalsIgnoreCase(receiverName)) {
receiverAdress = tmp.clientAddress;
break;
}
}
}
private void BuildClientList() {
message = "";
for (int i = 0; i < clients.size(); i++) {
Client tmp = (Client) clients.get(i);
message += tmp.clientName + "|";
}
}
private void NotifyAllClients() {
message = senderName;
senderName = "Server";
for (int i = 0; i < clients.size(); i++) {
Client tmp = (Client) clients.get(i);
if (!tmp.clientName.equalsIgnoreCase(message)) {
receiverAdress = tmp.clientAddress;
ServerSend();
}
}
}
private void BuildMsg(int argFlag) {
msg2send = senderName + MSG_SEPERATOR + argFlag + MSG_SEPERATOR + message;
}
public void ServerReceive() throws IOException {
byte[] buffer = new byte[BUFFER_LENGTH];
DatagramPacket gelenPaket = new DatagramPacket(buffer, BUFFER_LENGTH);
try {
socket.receive(gelenPaket);
} catch (Exception e) {}
receivedMsg = new String(gelenPaket.getData(), 0, gelenPaket.getLength());
senderAddress = gelenPaket.getSocketAddress();
}
public void ServerSend() {
try {
byte[] buffer = new byte[msg2send.length()];
buffer = msg2send.getBytes();
DatagramPacket gidenPaket = new DatagramPacket(buffer, buffer.length, receiverAdress);
socket.send(gidenPaket);
} catch (Exception e) {
}
}
private void ParseMsg() {
String[] parsedMsg = receivedMsg.split(MSG_SEPERATOR);
senderName = parsedMsg[0];
receiverName = parsedMsg[1];
msgType = Integer.parseInt(parsedMsg[2]);
message = parsedMsg[3];
}
public void HandleMsg() throws IOException {
if (msgType == ADD_ME) {
parent.AddTextarea("Yeni kullanici: " + message + ", adresi:" + senderAddress + "\n");
clients.add(new Client(message, senderAddress));
receiverAdress = senderAddress;
BuildMsg(ACK_MSG);
ServerSend();
BuildMsg(ADD_ME);
NotifyAllClients();
} else if (msgType == SEND_MSG) {
GetReceiverAddressByName();
parent.AddTextarea(senderName + " -> " + receiverName + " mesaj gonderiyor :'" + message + "'\n");
BuildMsg(SEND_MSG);
ServerSend();
} else if (msgType == REMOVE_ME) {
parent.AddTextarea(senderName + ", bağlantıyı sonlandırdı.\n");
RemoveClient(senderName);
message = senderName;
BuildMsg(REMOVE_ME);
NotifyAllClients();
} else if (msgType == GET_USERS) {
parent.AddTextarea(senderName + " kullanicisina liste yollaniliyor.\n");
BuildClientList();
senderName = "Sunucu";
receiverAdress = senderAddress;
BuildMsg(GET_USERS);
ServerSend();
}
}
}
class Client {
String clientName;
SocketAddress clientAddress;
public Client(String argName, SocketAddress argAddress) {
clientName = argName;
clientAddress = argAddress;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment