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

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

بدأه ابومحفوظ في 21 سبتمبر 2009 · 24 رد · 3,717 مشاهدة · في JavaME
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

عندي مشروع بالجافا يقوم بارسال رسالة نصية من خلوي الى خلوي اخر مرتبط بالكمبيوتر بالبلوتوث مثلا

ثم يقوم هذا الخلوي بارسال هذه البيانات الى جهاز الحاسوب باستخدام البلوتوث فيقوم جهاز الحاسوب بالرد عليها

البرمجة باستخدام برنام النت بينز 6.0

لكن يظهر اخطاء كثيرة في البرمجة

ارجو من لديه الخبرة في هذا الموضوع

ان يضع اي اكواد او ما شابه للفائدة

#2

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

ارجو التوضيح اكثر أو أن تضع الكود لنحاول حل المشكلة.

نفذت مشروع مماثل على VB.net بإستخدام ال AT Command

لذلك ما يلزمك في الجافا هو التعرف على منفذ ال usb الخاص بالجوال الموصول بالجهاز ومن ثم ارسال الاوامر لإرسال وتلقي الرسائل. اعتقد ان هناك مكتبة اسمها SMSLib خاصة بالجافا يمكنك استخدامها

وابحث في المنتدى ستجد العديد من المواضيع بخصوص مشروعك

#3

شكراً لك اخي الكريم على الرد السريع

انا مشروعي يقوم باعطاء اوامر للكمبيوتر عن طريق مسج من الموبايل

يستلمه جهاز خلوي موصول بالكمبيوتر ويعمل كوسيط بين الكمبيوتر والخلوي

فقط

انا جربت طرق كثيرة وقرأت عن الموضوع وجربت امثلة جاهزة من النت لكن عند تشغيل البرنامج يطلب import com.*;

عنده خطأ

وانا اعمل على الموضوع من فترة لكن لا فائدة؟؟؟؟؟؟؟؟؟؟؟؟؟

ارجو اعطائي البداية ومن اين ابدأ

لكن افضل ان تكون البرمجة باستخدام الجافا

#4
اقتباس
انا جربت طرق كثيرة وقرأت عن الموضوع وجربت امثلة جاهزة من النت لكن عند تشغيل البرنامج يطلب import com.*;

أرجو ان تضع الكود هنا لنستطيع التعديل عليه، لأني لم افهم ما هي المشكلة التي تواجهك

هذا ما لدي

يمكنك ان تستخدم comm library من موقع sun.com

لتحميل الملفات وطريقة نسخها ادخل الصفحة التالية

How to install The Java Communications API in a Windows Environment

وهذا مثال من موقع سن للكتابة على الseial port

عدلت على المثال بحيث يكون الجوال موصل على com4

import java.io.*;
import java.util.*;
import javax.comm.*;

/**
 * Class declaration
 *
 *
 * @author
 * @version 1.10, 08/04/00
 */
public class SimpleWrite {
	static Enumeration		  portList;
	static CommPortIdentifier portId;
	static String		  messageString = "ATD 00972599xxxxxx; \n\r";
	static SerialPort		  serialPort;
	static OutputStream	   outputStream;
	static boolean		  outputBufferEmptyFlag = false;
	/**
	 * Method declaration
	 *
	 *
	 * @param args
	 *
	 * @see
	 */
	public static void main(String[] args) {
	boolean portFound = false;
	String  defaultPort = "/dev/term/a";

	if (args.length > 0) {
		defaultPort = args[0];
	}

	portList = CommPortIdentifier.getPortIdentifiers();

	while (portList.hasMoreElements()) {
		portId = (CommPortIdentifier) portList.nextElement();

		if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {

		if (portId.getName().equals("COM4")) {
			System.out.println("Found port " + defaultPort);

			portFound = true;

			try {
			serialPort =
				(SerialPort) portId.open("SimpleWrite", 2000);
			} catch (PortInUseException e) {
			System.out.println("Port in use.");

			continue;
			}

			try {
			outputStream = serialPort.getOutputStream();
			} catch (IOException e) {}

			try {
			serialPort.setSerialPortParams(9600,
							   SerialPort.DATABITS_8,
							   SerialPort.STOPBITS_1,
							   SerialPort.PARITY_NONE);
			} catch (UnsupportedCommOperationException e) {}


			try {
				serialPort.notifyOnOutputEmpty(true);
			} catch (Exception e) {
			System.out.println("Error setting event notification");
			System.out.println(e.toString());
			System.exit(-1);
			}


			System.out.println(
				"Writing \""+messageString+"\" to "
			+serialPort.getName());

			try {
			outputStream.write(messageString.getBytes());
			} catch (IOException e) {}

			try {
			   Thread.sleep(2000);  // Be sure data is xferred before closing
			} catch (Exception e) {}
			serialPort.close();
			System.exit(1);
		}
		}
	}

	if (!portFound) {
		System.out.println("port " + defaultPort + " not found.");
	}
	}


}

هنا ال messageString نص سنخزن فيه ال AT COMMAND وهو

ATD 00972599xxxxxx;

وهو امر يقوم بالاتصال برقم جوال:: بسيط

للإستفادة اكثر هنا الصفحة الخاصة المكتبة

http://java.sun.com/products/javacomm/

ستجد المثال السابق في ال Documentation

بالتوفيق

#5

شكراً لك اخي الكريم

مشكوووووووووووووور جدا اخي الكريم على هذا الكود الذي سيكون البداية في مشروعي

انا جربت عدة اكواد لكن لم اجد غايتي فيها ولذلك لم اعمل على كتابتها في الموضوع

انا اريد ارسال الرسالة من خلوي الى الكمبيوتر عن طريق جهاز وسيط تحتوي على عدة باراميترات مثل رقم المرسل والعملية المطلوبة مثل تشغيل الجهاز واطفاءه

وامور مثل هذه

وارسال ايميل والعديد من الامور

لكن عندي سؤال اذا تكرمت

عند عمل برنامج بسيط على J2se يقوم بالاتصال مع الخلوي عن طريق البلوتوث ما هي المكتبات اللازمة في البرنامج او الباكجات المطلوبة

واذا ارفقت لنا مثال بسيط سأكون شاكرا لك

#6

حسب ما تفضلت فإنه سيكون لديك جوال يعمل كوسيط بين الحاسب وجهاز الجوال الاخر

وسواء كان الجوال موصول بالحاسب عن طريق كابل USB أو ال bluetooth فإنك تحتاج ل connectivity cable driver، لنفرض أن الجوال من نوع نوكيا اذا ستحتاج nokia connectivity cable driver أو nokia pc suite.

بعد هذا كله وظيفة الجافا ان تعرف لها رقم الcom port.

في الرد السابق تجد مثال على القراءة.

جربه كل ما عليك فعله هو تغير محتوى الdefaultPort الى رقم البورت.

جربته عندي وكان الجوال موصول على ال com4

#7

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

اخي الحرازي

شكرا للجميع على هذه المساعدة

انا جربت الكود السابق والحمد لله تمت الامور بنجاح

وقد عرفت ان المشكلة عندي انت في تنصيب SIM LIB

للتعامل مع ال COM

وجربت عملية ارسال رسالة الى رقم معين وتمت العملية بنجاح

بقي عندي عمليةاستقبال وقراءة الرسالة المستلمة؟؟؟؟؟؟؟؟؟؟؟؟

وتحليلها

مثل

تاريخ الرسالة

رقم المرسل

مضمون الرسالة علما ان مضمونها سيكون على شكل رقم مثلا

رقم 1 تشغيل

رقم 0 اطفاء الجهاز

الى اخره وذلك للتبسيط

ارجو من يستطيع الافادة

#8

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

ما هو نوع الجوال الموصول بالحاسب، لان هناك انواع لا تدعم ال AT Commands الخاصة بقرائة مخزن الرسائل

#9

جوالي 6630

قمت بعملية ارسال رسالة ونجحت

وقمت ايضا بعمل اتصال هاتفي وتمت العملية بنجاح عن طريق الكود السابق

بقي لدي عملية استقبال الرسائل فقط

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

#10

تأكد اولا ان الجوال يدعم قراءة الرسائل

للتأكد استخدم برنامج ال hyper terminal

start>all programs>Accessories>communication>hyper terminal

حدد رقم البورت

ثم ادخل الامر

at+cmgl=?

ان اعطاك ok يمكنك القراءة وإلا سيرجع ERROR

#12

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

اسف على ازعاجك اخي الحرازي

لكن جهازي لا يدعم ال AT COMMAND

وانا اريد استخدام مكتبة SIMLIB

وعلى علمي ان هذه المكتبة تعمل على قراءة الرسائل بدون الاعتماد على AT COMMAND

وقد طبقت مثالا بسيطا لارسال الرسائل وتمت العملية بنجاح بدون AT COMMAND

والا لما قام بارسال الرسالة

هذا ما اظنه

ما رأيك؟؟؟؟؟

#13

ظننتك استخدمت java communication API من sun

لم اسمع ب SIMLIB من قبل

هلا تزودني بمرجعها لأجربها عندي

#14

شكراً جزيلا اخي الحرازي

الموقع رائع

لكن فكرتي ان يعمل النظام على جميع الاجهزة التي ترتبط مع الكمبيوتر بغض النظر

عن امكانية دعم ال AT COMMAND او لا

وذلك تسهيلا للمستخدم

اشكرك مرة ثانية

اتمنى ان ارى رأيك بهذا الموضوع

#15
اقتباس
شكراً جزيلا اخي الحرازي

الموقع رائع

لكن فكرتي ان يعمل النظام على جميع الاجهزة التي ترتبط مع الكمبيوتر بغض النظر

عن امكانية دعم ال AT COMMAND او لا

وذلك تسهيلا للمستخدم

اشكرك مرة ثانية

اتمنى ان ارى رأيك بهذا الموضوع

العفو اخي

بالنسبة لدعم كافة الاجهزة فهذا اعتقد صعب، فعلى سبيل المثال مكتبة SMSLib وهي مكتبة مشهورة جدا وتستخدم بشكل واسع لا تدعم كافة الاجهزة كما في صفحتهم Compatibility

بالنسبة لشركة نوكيا

يمكنك قراءة الرسائل من جميع الاجهزة وذلك بإستخدام برنامج nokia pc suite وطبعا لم ينشروا ال source code للمبرمجين لذلك من الصعب التعامل معها.

ربما توجد برامج وليس مكتبات برمجية تفي بالغرض.

هذا ما لدي.

في الامثلة السابقة استخدمت جوال nokia 6230i ,تمكنت من قراءة الرسائل، لكن لم أتمكن من ذلك مع جوال N73 و N95

بالتوفيق

#16

اسف لهذا الخطأ

من السرعة بالطباعة

المكتبة SMSLIB

اسف مرة اخرى

لكن الموضوع يمكن قراءته من الوصلة التالية

/index.php?showtopic=141660

#17

اذا هل يوجد طريقة اخرى لارسال الرسالة من جهاز الخلوي المرتبط على ال COMالى الكمبيوتر عن طريق ال COm

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

انا يهمني

معرفة رقم المرسل0000لمقارنته بالارقام المخزنة في قاعدة البيانات

التاريخ0000000000

محتوى الرسالة0000000سيكون على شكل رقم

ملاحظة :هل اوامر ارسال الرسالة تختلف عن عملية قراءتها؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

عملية الارسال نجحت معي على جهاز 6630 الهمر

وبدون استخدام اوامر ال AT coMMAND

لكن الحل طويل

اما الان ف انا ابحث ع طريقة استقبال الرسائل

تم تعديل هذه المشاركة بواسطة ابومحفوظ في 22 سبتمبر 2009 في 20:13

#18

اطلعت على الموضوع.

حسب ما فهمت ان الاداة Gnokii تستطيع التعامل مع كل الجوالات لكن في موقعهم gnokii.org يتين انهم يدعمون انواع محددة من الجوالات.

اعتقد لو انك تستخدم gsm modem لن تواجه مشكلة التوافقية، لكني لا اعرف كيف يتم التعامل معه.

اخيرا اعتقد انه لمشروع ليس ضخم كخادم يستقبل الرسائل مثلا كما في القنوات التلفزيونية فإن استخدام جوال يعمل كgsm modem لن يكلف الكثير

جوال nokia 6230i مناسب جدا ويدعم معظم ال AT Commands

#19
اقتباس
اذا هل يوجد طريقة اخرى لارسال الرسالة من جهاز الخلوي المرتبط على ال COMالى الكمبيوتر عن طريق ال COm

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

انا يهمني

معرفة رقم المرسل0000لمقارنته بالارقام المخزنة في قاعدة البيانات

التاريخ0000000000

محتوى الرسالة0000000سيكون على شكل رقم

ملاحظة :هل اوامر ارسال الرسالة تختلف عن عملية قراءتها؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

عملية الارسال نجحت معي على جهاز 6630 الهمر

وبدون استخدام اوامر ال AT coMMAND

لكن الحل طويل

اما الان ف انا ابحث ع طريقة استقبال الرسائل

لم اجرب هذه المكتبة, اعتقد انها تستخدم ال at command بشكل ضمني.

كل عملي كان على sun comm api وهي مخصصة للتعامل مع المنافذ بشكل عام.

هذا المثال على قرائة الرسائل بإستخدام comm api

ملاحظة:الجوال موصول على com5

import java.io.*;
import java.util.*;
import javax.comm.*;

/**
 * Class declaration
 *
 *
 * @author
 * @version 1.8, 08/03/00
 */
public class SimpleRead implements Runnable, SerialPortEventListener {
	static CommPortIdentifier portId;
	static Enumeration		  portList;
	InputStream			  inputStream;
	static String		  messageString = "AT+CMGL=\"ALL\"; \n\r";
	SerialPort			  serialPort;
	Thread			  readThread;
static OutputStream	   outputStream;
	/**
	 * Method declaration
	 *
	 *
	 * @param args
	 *
	 * @see
	 */
	public static void main(String[] args) {
	boolean			  portFound = false;
	String			  defaultPort = "COM5";

 	if (args.length > 0) {
		defaultPort = args[0];
	}

	portList = CommPortIdentifier.getPortIdentifiers();

	while (portList.hasMoreElements()) {
		portId = (CommPortIdentifier) portList.nextElement();
		if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
		if (portId.getName().equals(defaultPort)) {
			System.out.println("Found port: "+defaultPort);
			portFound = true;
			SimpleRead reader = new SimpleRead();
		}
		}
	}
	if (!portFound) {
		System.out.println("port " + defaultPort + " not found.");
	}

	}

	/**
	 * Constructor declaration
	 *
	 *
	 * @see
	 */
	public SimpleRead() {
	try {
		serialPort = (SerialPort) portId.open("SimpleReadApp", 10000);
	} catch (PortInUseException e) {}

	try {
		inputStream = serialPort.getInputStream();
	} catch (IOException e) {}

	try {
		serialPort.addEventListener(this);
	} catch (TooManyListenersException e) {}

	serialPort.notifyOnDataAvailable(true);

	try {
		serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8,
					   SerialPort.STOPBITS_1,
					   SerialPort.PARITY_NONE);
	} catch (UnsupportedCommOperationException e) {}

	readThread = new Thread(this);

	readThread.start();


// send at command


			try {
			outputStream = serialPort.getOutputStream();
			} catch (IOException e) {}

			System.out.println(
				"Writing command to "
			+serialPort.getName());

			try {
			outputStream.write(messageString.getBytes());
			} catch (IOException e) {}

			try {
			   Thread.sleep(5000);  // Be sure data is xferred before closing
			} catch (Exception e) {}


	/////////////////////////////////
	}

	/**
	 * Method declaration
	 *
	 *
	 * @see
	 */
	public void run() {
	try {
		Thread.sleep(20000);
	} catch (InterruptedException e) {}
	}

	/**
	 * Method declaration
	 *
	 *
	 * @param event
	 *
	 * @see
	 */
	public void serialEvent(SerialPortEvent event) {
	switch (event.getEventType()) {

	case SerialPortEvent.BI:

	case SerialPortEvent.OE:

	case SerialPortEvent.FE:

	case SerialPortEvent.PE:

	case SerialPortEvent.CD:

	case SerialPortEvent.CTS:

	case SerialPortEvent.DSR:

	case SerialPortEvent.RI:

	case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
		break;

	case SerialPortEvent.DATA_AVAILABLE:
		byte[] readBuffer = new byte[200];

		try {
		while (inputStream.available() > 0) {
			int numBytes = inputStream.read(readBuffer);
		}

		System.out.println(new String(readBuffer));
		} catch (IOException e) {}

		break;
	}
	}

}
#20

انا اوفقك الرأي

المشروع ليس ضخم انما استقبال رسائل بعدد معين بشكل يومي ليس اكثر

لكني احاول ايجاد برنامج يعمل بشكل عكسي الان

بما اني ارسل رسالة من الكمبيوتر الى الخلوي وتتم بشكل صحيح

احاول ان اعمل العكس

بان ارسل رسالة من الخلوي الى الكمبيوتر ليس الا

#21

لاحظ انه ليس معنى ان الجوال يدعم ارسال الرسائل انه يدعم قراءتها.

دعنا نتفق على المكتبة التي تستخدمها؟

في الامثلة السابقة لم استخدم smslib

#22

قمت بتطبيق هذا الكود لكنه اعطاني ERrOR

بانه لا يمكن قراءة الرسالة من هذا الخلوي

لا يدعم AT COMMAND

وما الحل برأيك

انا استخدم SMSLIB

وجهاز N73

لم يعمل ايضا

تم تعديل هذه المشاركة بواسطة ابومحفوظ في 22 سبتمبر 2009 في 20:54

#23

الحل برأي استخدام جوال 6230i

هذه صورة بعد تطبيق المثال

post-70476-1253642052_thumb.jpg

#24

اشكرك مرة اخرى ساحاول مع اجهزة اخرى

#25

العفو اخي

أي مشكلة ارجو ان تطرحها هنا

شكرا

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…