الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

إرسال البيانات من applet إلى servlet

بدأه aymoon1987 في 1 ديسمبر 2008 · 29 رد · 5,121 مشاهدة · في JavaEE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بحثت في مواقع عديدة عن درس يشرح عملية الربط بين ال applet وال servlet عن طريق ال serialization ولم أجد .

انا أحاول عمل chat عن طريق الربط بين الapplet والservlet وبعد ان تم الربط لا أستطيع أن أرسل الرسالة الى كل من يستخدم الـapplet .

تم تعديل هذه المشاركة بواسطة علاء الصالحي في 16 فبراير 2010 في 18:26 — السبب: تعديل العنوان لكي يناسب ما انتهى إليه المو

NohTaDa

#2

ليس الأمر بهذه الصعوبة

أنتا لديك اتصال مباشر بين سيرفلت وأبلت

استخدم http لعملية النقل

ترسل صورة أو غيره

حاول ولننظر ما الذي ستحصل عليه

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#3

هذا هو كود ال 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

#4

من الذي يرسل الملف؟

هل هو الأبلت أم السيرفلت؟

لماذا لا تستخدم معمارية خادم/عميل

بدلاً من servlet

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#5

ماذا تعني ب :

اقتباس
لماذا لا تستخدم معمارية خادم/عميل
#6

sever/client architecture

بما أن العميل لدينا عبارة عن أبلت

فلماذا سيرفلت؟

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#7

ال client عبارة عن الapplet والservlet عبارة عن السيرفر

NohTaDa

#8

لماذا سيرفليت؟

لماذا لا يكون سيرفر عادي؟

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#9

آسف لم أكن أعلم انني أستطيع أن أجعله كسيرفر عادي . لقد استخدمت الsockets في البرنامج ووجدت انها أسهل طريقة لعمل ما أريد ولكن بعد ان استخدمت الseocketserver في الـserver side لم أستطع ان أجعلها في web application حتى الآن فقط تعمل بإستخدام أمر java في ال cmd line .

أحاول الآن أن أي طريقة أن أجعلها تعمل في الserlvlet او web listener .

NohTaDa

#10

هل تقصد أن هناك موقع كامل

تقوم السيرفلت بإرساله للعميل

السيرفلت تقوم بفتح خط مع العميل

عن طريق المنفذ 8080 يمكنك أن تجعل هناك نوعين من الطلب

الطلب الأول تقوم من خلاله بإرسال الموقع

والطلب الثاني تقوم من خلاله بإرسال الكائن للمستخدم

وهذا يعتمد على إضافة كعكة تخبر السيرفلت أن هذا applet

جرب وأخبرني بالنتيجة

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#11

استخدمت الطريقة ونجحت الحمد لله كل عن طريق

1 - ارسال الـobject من ال applet الى الservlet عن طريق الـhttp لتجنب الfirewall

2 - الservlet يستقبل الobject ويخزنه في الserver-side

3 - جميع الapplets تستخدم thread يطلب ال object من ال servlet

وبهذه الطريقة استطعت أن أحرك شكل في applet بإستخدام ال mouse ويحدث update لجميع الapplets المتصلة بالservlet ويتحرك بها الشكل أيضا .

NohTaDa

#12

جيد جدا..

لماذا لا تضع ملخص عن عملك و بالاضافة الى الكود

لكي تعم الفائدة و يتعلم باقي الاعضاء

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

#13

بسم الله الرحمن الرحيم

هذا هوة كود ال 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

#14

بصراحة لم أعرف أين قمت بإرسال الكائن

ولم يظهر لي كيف قمت بعمل إتصال؟

هلا قمت بالتوضيح أكثر

مع العلم بأن كود الأبلت هو المهم في الموضوع

أقصد كيف عملت request؟

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#15

لم ارسل بإستخدام ال 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 class

NohTaDa

#16

يعطيك العافية أخي

جميل جداً

لك مني كل التحية

على فكرة من الصعب على الكثير أن يضع ما ينتجه

أحترم هذه البادرة الجميلة منك

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#17

الشكر لك ولكل من يريد العلم .

ولو أني اعتقد أن الكود سهل الفهم فأنا أرحب بأي استفسار فيه .

تم تعديل هذه المشاركة بواسطة aymoon1987 في 12 ديسمبر 2008 في 04:24

NohTaDa

#18

عمل فعلا رائع جزاكم الله خيرا

ولكن لي ملاحظه ...

انت في ال Servlet تفحص ال command الآتي من ال clients ( hi, bye, .. (

ماذا لو اراد شخصا من ان يعدل في ال باكج و يضع command جديد ؟؟؟

سيضطر ان يعدل في الكود خاصتك !

حاول ان تجعل هذه ال commands متبادله في ال runtime

يعني اذا اراد احد ان يضيف command جديد كل ما عليه ان يرث من فئه معينه فقط

جزاكم الله خيرا

#19

السلام عليكــم ورحمـة الله وبركاتــه ،،

آسف جدا لتأخري بالرد

أقوم حاليا بتعديل الكود حيث يمكن للأبلت أن يرسل object كامل عبارة عن hashmap بها أي عدد من الفاريبلز وقيمة كل منهم .ومن هذا المنطلق يمكن أن يرسل الكثير من variables والتي بدورها يتم استقبالها والتعامل معها من قبل السيرفلت .

NohTaDa

#20

السلام عليكم ورحمة الله وبركاته

اخي aymoon1987

انا طالب دراسات عليا من العراق واحتاج الى تصميم موقع تعليمي الذي هو الجز العملي من مشروع تخرجي Mobile learning

واحتاج الى ان تكون خدمة Chat جزء من خدمات الموقع و التي تكون بين الطالب والاستاذ وهي خدمة جدا مهمة في موقعي .

فارجو منك اجابتي الله يبارك فيك

هل من الممكن ان استخدم برنامجك هذا في حل مشكلتي ؟

و اذا لا فهل هناك حل اخر لاضافة خدمة Chat الى موقعي ولو بصورة مبسطة الله يبارك فيك

مثلا سكربتات او مواقع تدعم هذا هذه الخدمة

علما انه انا اشتغل على jsp and netbeans

سلامي

اخوك

محمود سامي

#21

أخ محمود سامي, جرب openMeeting

#22

السلام عليكم ورحمة الله وبركاته

اخي العزيز ماذا تقصد openMeeting

ارجو ان توضح اجابيتك الله يبراك فيك اخي هويدي

رجائا تبين لي مواقع او امثلة تبين لي هذ ا الشيء

سلامي

اخوك

محمود سامي

#23

السلام عليكم ورحمة الله وبركاته

اخي العزيز يمكن ان توضح لي لانه عملت بحث ولم اجد شيء يفيدني

عن الموضع

سلامي

#24

شوف مثلا :

مثلا http://www.flexvideochat.com/bin/

#25

السلام عليكم ورحمة الله وبركاته

اخي هويدي الله يعزكم ويبارك فيك لخدمة الاسلام والمسلمين ( وانا طمعت في كرمكم ووسع صدركم على اسالتي والحاحي عليكم وعلى بقية الاخوه )

ولكن ارجو ان ابين لك شيء

اولا :

بارك الله فيك على تجاوبك السريع وجعل الله هذا في ميزان حسناتكم

وان الlink عمل معي والحمد لله .(على الحاسبة )

ثانيا :

ولكن عملي هو على جهاز الموبايل لانه مشروعي هو عمل موقع تعليمي يكون الدخول اليه من اجهزة الموبايلات فارجو ان كان هناك نفس هذا الموقع ( من ناحية الفكرة ) ان ترسله لي ولكن على الموبايل

او فكرة اخرى ليس ضروري خدمة جات متكاملة ولكن حتى وان كان عملية

chat بسيطة بين شخصين ( سوى كان برنامج او موقع )

وإن شاء الله يجعل وقتك الذي تصرفة معي(في التوجيه والارشاد ) في ميزان حسناتك

سلامي

اخوك

محمود سامي

مواضيع مشابهة