PDA

View Full Version : سوال: نحوه ارسال اطلاعات به روی پورت



gbg
شنبه 09 شهریور 1387, 17:33 عصر
سلام
چطور میشه با پورت ها ارتباط برقرار کرد - منظورم سوکت هست نه comport
من خودم یکی نوشتم ارسال میکنه ولی دریافت نمی کنه

d@nyal
شنبه 09 شهریور 1387, 22:55 عصر
کدتون رو اینجا قرار بدید تا درباره اش بحث کنیم...

Amir Oveisi
یک شنبه 10 شهریور 1387, 00:03 صبح
يه نگاه به این بندازین، نحوه استفاده از پورت ها برای ارسال و دریافت داده رو می بینید چجوریه.

موفق باشید
jooje

gbg
یک شنبه 10 شهریور 1387, 00:18 صبح
سلام
خیلی ممنون قسمت ارسال رو من به این صورت نوشتم


public string SendDataToServer(String message, Byte cid)
{
message = " " + message;
Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
data[0] = cid;
stream.Write(data, 0, data.Length);
while (!stream.DataAvailable) Application.DoEvents();
if (stream.DataAvailable)
{
data = new Byte[256];
String responseData = String.Empty;
responseData = "";
Int32 bytes = stream.Read(data, 0, data.Length);
responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
return responseData;
}
return "Time out";
}



دو تا تابع برای بازکردن و پستن پورت هم هست
خوشبختانه کد من درست هستش و یک اشکال کوچیک داره و اون اینه که unicode رو به صورت علامت سوال ارسال می کنه و سرور بهش پاسخ نمیده
قسمت سرور با دلفی نوشته شده و انتظار دریافت رشته widestring رو داره ( چون اطلاعات فارسی پردازش میشه )
می خواستم ببینم widestring تو C# معادلش چي میشه؟

Amir Oveisi
یک شنبه 10 شهریور 1387, 00:45 صبح
چرا در هر دو طرف از UTF8 استفاده نمی کنید؟‌ (البته من از دلفی چیزی نمیدونم!)
معادل widestring‌ همون string‌ هست ظاهرا
http://www.netcoole.com/delphi2cs/datatype.htm

gbg
یک شنبه 10 شهریور 1387, 00:52 صبح
اين خط رو

Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);

به صورت

Byte[] data = System.Text.Encoding.Unicode.GetBytes(message);

که می نویسم خالی ارسال میشه
و اینجوی


Byte[] data = System.Text.Encoding.UTF8.GetBytes(message);

کاراکتر هایی دیگه ارسال میشه

Amir Oveisi
یک شنبه 10 شهریور 1387, 00:57 صبح
شما یه برنامه کوچیک واسه اون ور با NET.‌بنویسین و ببینید چطور جواب می گیرید.
من فکر میکنم مشکل به خاطر اینه که اون ور دلفیه.

gbg
یک شنبه 10 شهریور 1387, 01:03 صبح
این کار رو هم انجام میدم ولی به هر حال باید منتقل بشه و البته درست
در حالت ASCII اگه لاتین باشه درست منتقل میشه ولی بقیه رو چک نکردم
ولی به نظر من به خاطر تفاوت در Enciding رشته ها هستش

Amir Oveisi
یک شنبه 10 شهریور 1387, 01:09 صبح
با Encoding UTF8 هم لاتین و هم فارسی باید به درستی منتقل و به درستی دریافت بشن. کاری که من چندین بار انجام دادم.

gbg
یک شنبه 10 شهریور 1387, 01:24 صبح
تعریف widestring در دلفي :
WideString ~2^30 characters 4 bytes to 2GB Unicode characters; multi-user servers and multi-language applications

با utf8 کلمه رسیدی؟ رو ميفرستم این در یافت میشه ط±ط³غŒط¯غŒطں


تست کردم با utf8 لاتین درست ارسال میشه و درست دریافت میشه

Amir Oveisi
یک شنبه 10 شهریور 1387, 01:53 صبح
اون ور هم بایت های دریافتی رو بصورت UTF8 در میاری؟

gbg
یک شنبه 10 شهریور 1387, 02:04 صبح
نه اون ور بایت ها رو به صورت widestring لازم دارم
در ضمن کد "ر" 1585 هستش ولی تو C# به 1591 یعني "ط" تبدیل میشه

Amir Oveisi
یک شنبه 10 شهریور 1387, 02:14 صبح
ببینین همه کاراکترها همینقدر جابجا میشن؟ اگه همه به یه مقدار تغییر میکنه کدشون، خوب کارتون حله.

gbg
یک شنبه 10 شهریور 1387, 02:23 صبح
خوب فهمیدم
utf-16 باید استفاده کنم اختلاف کم بودش مثلا 1585 رو به صورت 45 و 6 ارسال میشه که 6*256+45=1585
یه کانورت می خواد و تشخیص اینکه کلاینت متصل شده کنونی C# هست یا دلفی چون با دلفی درست کار میکنه
ممنون bermooda (http://barnamenevis.org/forum/member.php?u=17736)