Created
September 27, 2013 17:07
-
-
Save ahmetkakici/6731784 to your computer and use it in GitHub Desktop.
Blog
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* | |
* @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; | |
} | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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