بحثت في مواقع عديدة عن درس يشرح عملية الربط بين ال applet وال servlet عن طريق ال serialization ولم أجد .
انا أحاول عمل chat عن طريق الربط بين الapplet والservlet وبعد ان تم الربط لا أستطيع أن أرسل الرسالة الى كل من يستخدم الـapplet .
بحثت في مواقع عديدة عن درس يشرح عملية الربط بين ال applet وال servlet عن طريق ال serialization ولم أجد .
انا أحاول عمل chat عن طريق الربط بين الapplet والservlet وبعد ان تم الربط لا أستطيع أن أرسل الرسالة الى كل من يستخدم الـapplet .
تم تعديل هذه المشاركة بواسطة علاء الصالحي في 16 فبراير 2010 في 18:26 — السبب: تعديل العنوان لكي يناسب ما انتهى إليه المو
NohTaDa
ليس الأمر بهذه الصعوبة
أنتا لديك اتصال مباشر بين سيرفلت وأبلت
استخدم http لعملية النقل
ترسل صورة أو غيره
حاول ولننظر ما الذي ستحصل عليه
تحياتي
هذا هو كود ال Applet
public class post extends javax.swing.JApplet {
String Nickname = "Guest";
/** Initializes the applet post */
public void init() {
this.setSize(450, 200);
try {
java.awt.EventQueue.invokeAndWait(new Runnable() {
public void run() {
Nickname = JOptionPane.showInputDialog("Enter Your NickName");
initComponents();
jLabel1.setText("WelCome , " + Nickname);
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
}
/** This method is called from within the init() method 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();
jButton1 = new javax.swing.JButton();
jTextField1 = new javax.swing.JTextField();
jScrollPane1 = new javax.swing.JScrollPane();
jTextArea1 = new javax.swing.JTextArea();
jLabel1 = new javax.swing.JLabel();
jButton1.setText("Send");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jTextField1.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
jTextField1KeyPressed(evt);
}
});
jTextArea1.setColumns(20);
jTextArea1.setEditable(false);
jTextArea1.setForeground(new java.awt.Color(204, 0, 0));
jTextArea1.setRows(5);
jTextArea1.setSelectionColor(new java.awt.Color(0, 153, 153));
jScrollPane1.setViewportView(jTextArea1);
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)
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 305, Short.MAX_VALUE)
.addGap(18, 18, 18)
.addComponent(jButton1)))
.addContainerGap())
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 222, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton1))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel1)
.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()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
}// </editor-fold>
void updatetext(String msg) {
jTextArea1.append(msg + "\n");
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
send();
jTextField1.setText("");
}
private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
send();
jTextField1.setText("");
}
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea jTextArea1;
private javax.swing.JTextField jTextField1;
// End of variables declaration
private void send() {
ObjectOutputStream outputToServlet = null;
try {
//URL cURL = new URL(getCodeBase()+"please");
URL cURL = new URL("http://localhost:8080/ptest/please");
URLConnection servletConnection = cURL.openConnection();
servletConnection.setDoInput(true);
servletConnection.setDoOutput(true);
servletConnection.setUseCaches(false);
servletConnection.setRequestProperty("Content-Type", "application/octet-stream");
outputToServlet = new ObjectOutputStream(servletConnection.getOutputStream());
String str = Nickname + ">>" + jTextField1.getText();
outputToServlet.writeObject(str);
outputToServlet.flush();
outputToServlet.close();
readServletResponse(servletConnection);
} catch (Exception e) {
}
}
public void readServletResponse(URLConnection servletConnection) {
BufferedReader inFromServlet = null;
try {
inFromServlet = new BufferedReader(new InputStreamReader(servletConnection.getInputStream()));
String str;
while (null != ((str = inFromServlet.readLine()))) {
System.out.println("Reading servlet response: " + str);
updatetext(str);
}
inFromServlet.close();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e.toString());
}
}
}وكود الservlet
public class please extends HttpServlet {
static chatHistory his = new chatHistory();
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
ObjectInputStream inputFromApplet = null;
String msg = null;
PrintWriter out = null;
try {
inputFromApplet = new ObjectInputStream(req.getInputStream());
//msg = (String) inputFromApplet.readObject();
Object obj = inputFromApplet.readObject();
JOptionPane.showMessageDialog(null, "Class is "+obj.getClass().toString());
msg = (String) obj;
inputFromApplet.close();
String message =msg;
out = new PrintWriter(resp.getOutputStream());
resp.setContentType("text/plain");
out.println(message);
out.flush();
out.close();
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "I'm servlet"+ex.getMessage());
}
}
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
public class myMassage implements Serializable {
String Message;
String NickName;
public myMassage() {
}
public myMassage(String Mes, String Nick) {
Message = Mes;
NickName = Nick;
}
}
}الكود شغال يرسل ويستقبل String
ولكن مع كل applet على حدة ولا يرسل الى جميع ال applets
هل من طريقة بإستخدام ال sessions أو ال IP كي يرسل الى كل من يستخدم ال applet ؟؟؟؟
NohTaDa
من الذي يرسل الملف؟
هل هو الأبلت أم السيرفلت؟
لماذا لا تستخدم معمارية خادم/عميل
بدلاً من servlet
تحياتي
ماذا تعني ب :
اقتباسلماذا لا تستخدم معمارية خادم/عميل
آسف لم أكن أعلم انني أستطيع أن أجعله كسيرفر عادي . لقد استخدمت الsockets في البرنامج ووجدت انها أسهل طريقة لعمل ما أريد ولكن بعد ان استخدمت الseocketserver في الـserver side لم أستطع ان أجعلها في web application حتى الآن فقط تعمل بإستخدام أمر java في ال cmd line .
أحاول الآن أن أي طريقة أن أجعلها تعمل في الserlvlet او web listener .
NohTaDa
هل تقصد أن هناك موقع كامل
تقوم السيرفلت بإرساله للعميل
السيرفلت تقوم بفتح خط مع العميل
عن طريق المنفذ 8080 يمكنك أن تجعل هناك نوعين من الطلب
الطلب الأول تقوم من خلاله بإرسال الموقع
والطلب الثاني تقوم من خلاله بإرسال الكائن للمستخدم
وهذا يعتمد على إضافة كعكة تخبر السيرفلت أن هذا applet
جرب وأخبرني بالنتيجة
تحياتي
استخدمت الطريقة ونجحت الحمد لله كل عن طريق
1 - ارسال الـobject من ال applet الى الservlet عن طريق الـhttp لتجنب الfirewall
2 - الservlet يستقبل الobject ويخزنه في الserver-side
3 - جميع الapplets تستخدم thread يطلب ال object من ال servlet
وبهذه الطريقة استطعت أن أحرك شكل في applet بإستخدام ال mouse ويحدث update لجميع الapplets المتصلة بالservlet ويتحرك بها الشكل أيضا .
NohTaDa
جيد جدا..
لماذا لا تضع ملخص عن عملك و بالاضافة الى الكود
لكي تعم الفائدة و يتعلم باقي الاعضاء
Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why. Programmers combine theory and practice: Nothing works and they don't know why
بسم الله الرحمن الرحيم
هذا هوة كود ال servlet
public class ChatServlet extends HttpServlet {
private ChatGroup cg; // for storing client information
@Override
public void init() throws ServletException {
cg = new ChatGroup();
}
@Override
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException // look at the cmd parameter to decide which message the client sent
{
String command = request.getParameter("cmd");
System.out.println("Command: " + command);
if (command.equals("hi")) {
processHi(request, response);
} else if (command.equals("bye")) {
processBye(request, response);
} else if (command.equals("who")) {
processWho(response);
}else if (command.equals("view")){
processView(request, response);
} else if (command.equals("msg")) {
processMsg(request, response);
} else if (command.equals("send")) {
processSnd(request, response);
}else if (command.equals("read")) {
processRead(request, response);
} else {
System.out.println("Did not understand command: " + command);
}
}
private void processHi(HttpServletRequest request,
HttpServletResponse response)
throws IOException {
int uid = -1;
String userName = request.getParameter("name");
if (userName != null) {
uid = cg.addUser(userName);
}
if (uid != -1) {
Cookie c = new Cookie("uid", "" + uid);
response.addCookie(c);
}
PrintWriter output = response.getWriter();
if (uid != -1) {
output.println("ok");
} else {
output.println("no");
}
output.close();
}
private void processBye(HttpServletRequest request,
HttpServletResponse response)
throws IOException {
boolean isDeleted = false;
String userName = request.getParameter("name");
if (userName != null) {
int uid = getUidFromCookie(request);
isDeleted = cg.delUser(userName, uid);
}
PrintWriter output = response.getWriter();
if (isDeleted) {
output.println("ok");
} else {
output.println("no");
}
output.close();
}
private int getUidFromCookie(HttpServletRequest request)
{
Cookie[] cookies = request.getCookies();
Cookie c;
for (int i = 0; i < cookies.length; i++) {
c = cookies;
if (c.getName().equals("uid")) {
try {
return Integer.parseInt(c.getValue());
} catch (Exception ex) {
System.out.println(ex);
return -1;
}
}
}
return -1;
}
private void processWho(HttpServletResponse response)
throws IOException {
PrintWriter output = response.getWriter();
output.print(cg.who());
output.close();
}
private void processSnd(HttpServletRequest request,
HttpServletResponse response)
throws IOException /* Message format:
ChatServlet?cmd=send&name=??&msg=?? + uid cookie
Add the message to the server's list
*/ {
boolean isStored = false; // default for failure
String userName = request.getParameter("name");
String msg = request.getParameter("msg");
System.out.println("msg: " + msg);
if ((userName != null) && (msg != null)) {
int uid = getUidFromCookie(request);
isStored = cg.storeXY(userName, uid, msg);
}
PrintWriter output = response.getWriter();
if (isStored) {
output.println("ok");
} else {
output.println("no");
}
output.close();
}
private void processMsg(HttpServletRequest request,
HttpServletResponse response)
throws IOException /* Message format:
ChatServlet?cmd=msg&name=??&msg=?? + uid cookie
Add the message to the server's list
*/ {
boolean isStored = false; // default for failure
String userName = request.getParameter("name");
String msg = request.getParameter("msg");
System.out.println("msg: " + msg);
if ((userName != null) && (msg != null)) {
int uid = getUidFromCookie(request);
isStored = cg.storeMessage(userName, uid, msg);
}
PrintWriter output = response.getWriter();
if (isStored) {
output.println("ok");
} else {
output.println("no");
}
output.close();
}
private void processView(HttpServletRequest request,
HttpServletResponse response)throws IOException
{
int uid = -1;
String userName = request.getParameter("name");
if (userName != null) {
uid = getUidFromCookie(request);
}
PrintWriter output = response.getWriter();
if (uid != -1) {
output.print(cg.view(userName, uid));
output.flush();
} else {
output.println("no");
}
output.close();
}
private void processRead(HttpServletRequest request,
HttpServletResponse response)
throws IOException {
int uid = -1; // default for failure
String userName = request.getParameter("name");
if (userName != null) {
uid = getUidFromCookie(request);
}
PrintWriter output = response.getWriter();
if (uid != -1) {
output.print(cg.read(userName, uid));
output.flush();
} else {
output.println("no");
}
output.close();
} // end of processRead()
} // end of ChatServlet classومعه كلاستين الأولى تحتويى على بيانات ال person والأخرى تحتوي على كل ما يراد تخزينه بالسيرفر
public class Person {
private static final int ID_MAX = 1024;
private String userName;
private int uid;
private int msgsIndex;
public Person(String nm) {
userName = nm;
uid = generateUID();
msgsIndex = 0;
}
public String getUserName() {
return userName;
}
public int getUID() {
return uid;
}
public int getMsgsIndex() {
return msgsIndex;
}
public void setMsgsIndex(int newIndex) {
msgsIndex = newIndex;
}
public boolean matches(String nm, int id) {
return (userName.equals(nm) && (uid == id));
}
int generateUID()
{
int temp = 0;
temp = (int) Math.round(Math.random() * ID_MAX);
return temp;
}
}import java.util.*;
public class ChatGroup {
private ArrayList chatUsers;
private ArrayList messages;
private ArrayList values;
private int numUsers;
public ChatGroup() {
chatUsers = new ArrayList();
messages = new ArrayList();
values = new ArrayList();
numUsers = 0;
}
synchronized public int addUser(String name) {
if (numUsers == 0) {
messages.clear();
values.clear();
}
if (isUniqueName(name)) {
Person c = new Person(name);
chatUsers.add(c);
messages.add("(" + name + ") has arrived");
numUsers++;
return c.getUID();
}
return -1;
}
boolean storeXY(String userName, int uid, String msg) {
Person c = findUser(userName, uid);
if (c != null) {
values.add(msg);
return true;
}
return false;
}
private boolean isUniqueName(String name) {
Person c;
for (int i = 0; i < chatUsers.size(); i++) {
c = (Person) chatUsers.get(i);
if (c.getUserName().equals(name)) {
return false;
}
}
return true;
}
public boolean resetall() {
boolean resetted = false;
try {
messages.clear();
values.clear();
chatUsers.clear();
resetted = true;
} catch (Exception ex) {
resetted = false;
}
return resetted;
}
synchronized public boolean delUser(String name, int uid) {
if (uid == -1) {
return false;
}
Person c;
for (int i = 0; i < chatUsers.size(); i++) {
c = (Person) chatUsers.get(i);
if (c.matches(name, uid)) {
chatUsers.remove(i);
messages.add("**[" + name + "] Left The room**");
numUsers--;
return true;
}
}
return false;
}
private Person findUser(String name, int uid) {
if (uid == -1) {
return null;
}
Person c;
for (int i = 0; i < chatUsers.size(); i++) {
c = (Person) chatUsers.get(i);
if (c.matches(name, uid)) {
return c;
}
}
return null;
}
synchronized public boolean storeMessage(String name, int uid, String msg) {
Person c = findUser(name, uid);
if (c != null) {
messages.add("(" + name + ") " + msg);
return true;
}
return false;
}
synchronized public String read(String name, int uid) /*
A message may be invisible -- it may be addressed to a
single person by using the message format:
msg / toName
Message of this kind are not added to the list returned
to the client.
*/ {
StringBuffer msgs = new StringBuffer();
Person c = findUser(name, uid);
if (c != null) {
int msgsIndex = c.getMsgsIndex();
String msg;
for (int i = msgsIndex; i < messages.size(); i++) {
msg = (String) messages.get(i);
if (isVisibleMsg(msg, name)) {
msgs.append(msg + "\n");
}
}
c.setMsgsIndex(messages.size());
}
return msgs.toString();
}
synchronized public String view(String name, int uid) {
StringBuffer msgs = new StringBuffer();
Person c = findUser(name, uid);
if (c != null) {
int msgsIndex = c.getMsgsIndex();
String msg;
for (int i = msgsIndex; i < values.size(); i++) {
msg = (String) values.get(i);
if (isVisibleMsg(msg, name)) {
msgs.append(msg + "\n");
}
}
c.setMsgsIndex(values.size());
}
return msgs.toString();
}
private boolean isVisibleMsg(String msg, String name) /* A message is visible if it has no "/ name" part, or
"/ name" is the user, or the message is _from_ the user.
*/ {
int index = msg.indexOf("/");
if (index == -1) // no '/', so message is public
{
return true;
}
// does have a "/ name" part
String toName = msg.substring(index + 1).trim();
if (toName.equals(name)) // for this user
{
return true;
} else { // for another user
if (msg.startsWith("(" + name)) // but from this user
{
return true;
} else {
return false;
}
}
}
synchronized public String who() {
Person c;
StringBuffer whoList = new StringBuffer();
for (int i = 0; i < chatUsers.size(); i++) {
c = (Person) chatUsers.get(i);
whoList.append("" + (i + 1) + ". " + c.getUserName() + "\n");
}
return whoList.toString();
}
}اما عن كود الClient فهوة عبارة عن ابلت
يرسل الى السيرفلت طلب في الrequest على حسب ما يشاء أن يفعل مثل ذلك :-
* ChatServlet?cmd=hi&name=??
* ChatServlet?cmd=bye&name=?? + uid cookie
* ChatServlet?cmd=who
* ChatServlet?cmd=msg&name=??&msg=?? + uid cookie
* ChatServlet?cmd=read&name=?? + uid cookie
* ChatServlet?cmd=send&name=??&msg=?? + uid cookie
* ChatServlet?cmd=view&name=?? + uid cookie
NohTaDa
بصراحة لم أعرف أين قمت بإرسال الكائن
ولم يظهر لي كيف قمت بعمل إتصال؟
هلا قمت بالتوضيح أكثر
مع العلم بأن كود الأبلت هو المهم في الموضوع
أقصد كيف عملت request؟
تحياتي
لم ارسل بإستخدام ال serialization لقد قمت بالإرسال عن طريق الURL connection بواسطة ال GET Method وعن كود الأبلت
public class Pooltest extends javax.swing.JApplet {
private static final String SERVER = "http://localhost:2677/servlet/ChatServlet";
private String userName;
private String cookieStr = null;
private int BX = 0;
private int BY = 0;
/** Initializes the applet NewJApplet */
@Override
public void init() {
userName = JOptionPane.showInputDialog("Please Enter You Name");
addMouseMotionListener(new mousehandler());
initComponents();
sayHi();
//new Watcher(this, userName, cookieStr).start();
setSize(300, 300);
}
void updateXY(int x, int y) {
BX = x;
BY = y;
repaint();
}
@Override
public void paint(Graphics g) {
g.clearRect(0, 0, getHeight(), getWidth());
g.fillRect(BX, BY, 30, 30);
}
public void handleXY(String msg) {
if (msg.indexOf('\n') != -1) {
String x, y;
x = msg.substring(0, msg.indexOf('-'));
y = msg.substring(msg.indexOf('-') + 1, msg.indexOf('\n'));
BX = Integer.parseInt(x);
BY = Integer.parseInt(y);
//System.out.println("Message ="+msg+"BX="+BX+"BY="+BY);*/
repaint();
}
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
setStub(null);
jLabel1.setText("jLabel1");
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()
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(275, Short.MAX_VALUE)
.addComponent(jLabel1)
.addContainerGap())
);
}// </editor-fold>//GEN-END:initComponents
private void sendPOSMessage(String msg) {
try {
URL url = new URL(SERVER + "?cmd=send&name=" +
URLEncoder.encode(userName, "UTF-8") +
"&msg=" +
URLEncoder.encode(msg, "UTF-8"));
URLConnection conn = url.openConnection();
conn.setRequestProperty("Cookie", cookieStr);
BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String response = br.readLine().trim();
br.close();
if (!response.equals("ok")) {
showMsgs("Message Send Rejected\n");
} else {
handleXY(msg);
}
} catch (Exception e) {
showMsgs("Servlet Error. Did not send: " + msg + "\n");
System.out.println(e);
}
}
private class mousehandler implements MouseMotionListener {
public void mouseDragged(MouseEvent e) {
int x = e.getX();
int y = e.getY();
String msg = "" + x + "-" + y;
BX = x;
BY = y;
repaint();
sendPOSMessage(msg);
}
public void mouseMoved(MouseEvent e) {
}
}
public void showMsgs(final String msg) {
System.out.println("showMsg(): " + msg);
jLabel1.setText(msg);
}
private void sayHi() {
try {
URL url = new URL(SERVER + "?cmd=hi&name=" +
URLEncoder.encode(userName, "UTF-8"));
URLConnection conn = url.openConnection();
cookieStr = conn.getHeaderField("Set-Cookie"); // get the cookie
System.out.println("Received cookie: " + cookieStr);
if (cookieStr != null) {
int index = cookieStr.indexOf(";");
if (index != -1) {
cookieStr = cookieStr.substring(0, index); // strip away extras
}
}
BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String response = br.readLine().trim();
br.close();
if (response.equals("ok") && (cookieStr != null)) {
jLabel1.setText("Server Login Successful");
System.out.println("Server Login Successful");
} else {
System.out.println("Server Rejected Login");
System.exit(0);
}
} catch (Exception e) {
System.out.println(e);
System.exit(0);
}
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JLabel jLabel1;
// End of variables declaration//GEN-END:variables
}/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author m0o0n
*/
import java.io.*;
import java.net.*;
public class Watcher extends Thread {
private static final int SLEEP_TIME = 500;
private static final String SERVER = "http://localhost:2677/servlet/ChatServlet";
private Pool client;
private String userName;
private String cookieStr = null;
public Watcher(Pool c, String nm, String cs) {
client = c;
userName = nm;
cookieStr = cs;
}
@Override
public void run() // Keep polling forever
{
URL url;
URLConnection conn;
BufferedReader br;
String line, response;
StringBuffer resp;
try {
String readRequest = SERVER + "?cmd=view&name=" +
URLEncoder.encode(userName, "UTF-8");
while (true) {
Thread.sleep(SLEEP_TIME);
url = new URL(readRequest);
conn = url.openConnection();
conn.setRequestProperty("Cookie", cookieStr);
br = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
resp = new StringBuffer(); // build up the response
while ((line = br.readLine()) != null) {
if (!fromClient(line)) // if not from client
{
resp.delete(0, resp.length());
resp.append(line + "\n");
}
}
br.close();
response = resp.toString();
if ((response != null) && !response.equals("\n")) {
client.handleXY(response);
}
}
} catch (Exception e) {
client.showMsgs("Servlet Error: watching terminated\n");
System.out.println(e);
}
} // end of run()
private boolean fromClient(String line) // A line (message) is from a client if it begins with (Name)
{
if (line.startsWith("(" + userName)) {
return true;
}
return false;
} // end of fromClient()
} // end of URLChatWatcher classNohTaDa
يعطيك العافية أخي
جميل جداً
لك مني كل التحية
على فكرة من الصعب على الكثير أن يضع ما ينتجه
أحترم هذه البادرة الجميلة منك
تحياتي
الشكر لك ولكل من يريد العلم .
ولو أني اعتقد أن الكود سهل الفهم فأنا أرحب بأي استفسار فيه .
تم تعديل هذه المشاركة بواسطة aymoon1987 في 12 ديسمبر 2008 في 04:24
NohTaDa
عمل فعلا رائع جزاكم الله خيرا
ولكن لي ملاحظه ...
انت في ال Servlet تفحص ال command الآتي من ال clients ( hi, bye, .. (
ماذا لو اراد شخصا من ان يعدل في ال باكج و يضع command جديد ؟؟؟
سيضطر ان يعدل في الكود خاصتك !
حاول ان تجعل هذه ال commands متبادله في ال runtime
يعني اذا اراد احد ان يضيف command جديد كل ما عليه ان يرث من فئه معينه فقط
جزاكم الله خيرا
السلام عليكــم ورحمـة الله وبركاتــه ،،
آسف جدا لتأخري بالرد
أقوم حاليا بتعديل الكود حيث يمكن للأبلت أن يرسل object كامل عبارة عن hashmap بها أي عدد من الفاريبلز وقيمة كل منهم .ومن هذا المنطلق يمكن أن يرسل الكثير من variables والتي بدورها يتم استقبالها والتعامل معها من قبل السيرفلت .
NohTaDa
السلام عليكم ورحمة الله وبركاته
اخي aymoon1987
انا طالب دراسات عليا من العراق واحتاج الى تصميم موقع تعليمي الذي هو الجز العملي من مشروع تخرجي Mobile learning
واحتاج الى ان تكون خدمة Chat جزء من خدمات الموقع و التي تكون بين الطالب والاستاذ وهي خدمة جدا مهمة في موقعي .
فارجو منك اجابتي الله يبارك فيك
هل من الممكن ان استخدم برنامجك هذا في حل مشكلتي ؟
و اذا لا فهل هناك حل اخر لاضافة خدمة Chat الى موقعي ولو بصورة مبسطة الله يبارك فيك
مثلا سكربتات او مواقع تدعم هذا هذه الخدمة
علما انه انا اشتغل على jsp and netbeans
سلامي
اخوك
محمود سامي
أخ محمود سامي, جرب openMeeting
السلام عليكم ورحمة الله وبركاته
اخي العزيز ماذا تقصد openMeeting
ارجو ان توضح اجابيتك الله يبراك فيك اخي هويدي
رجائا تبين لي مواقع او امثلة تبين لي هذ ا الشيء
سلامي
اخوك
محمود سامي
السلام عليكم ورحمة الله وبركاته
اخي العزيز يمكن ان توضح لي لانه عملت بحث ولم اجد شيء يفيدني
عن الموضع
سلامي
شوف مثلا :
السلام عليكم ورحمة الله وبركاته
اخي هويدي الله يعزكم ويبارك فيك لخدمة الاسلام والمسلمين ( وانا طمعت في كرمكم ووسع صدركم على اسالتي والحاحي عليكم وعلى بقية الاخوه )
ولكن ارجو ان ابين لك شيء
اولا :
بارك الله فيك على تجاوبك السريع وجعل الله هذا في ميزان حسناتكم
وان الlink عمل معي والحمد لله .(على الحاسبة )
ثانيا :
ولكن عملي هو على جهاز الموبايل لانه مشروعي هو عمل موقع تعليمي يكون الدخول اليه من اجهزة الموبايلات فارجو ان كان هناك نفس هذا الموقع ( من ناحية الفكرة ) ان ترسله لي ولكن على الموبايل
او فكرة اخرى ليس ضروري خدمة جات متكاملة ولكن حتى وان كان عملية
chat بسيطة بين شخصين ( سوى كان برنامج او موقع )
وإن شاء الله يجعل وقتك الذي تصرفة معي(في التوجيه والارشاد ) في ميزان حسناتك
سلامي
اخوك
محمود سامي