PDA

View Full Version : مقاله: یه برنامه مسنجر همون چت خودمون



Hamid.zaeimpoor
یک شنبه 06 بهمن 1387, 21:45 عصر
سلام
یه برنامه هست که به صورت کلاینت سرور یه سیستم مسنجر ساده رو محیا میکنه یه چیزی تو مایه های یاهو مسنجر ولی ساده است و جالب!

http://super-market.somee.com/chat.zip

Somayeh_Zamani
دوشنبه 07 بهمن 1387, 11:17 صبح
با سلام
دستتون درد نكنه. ولي برنامه ي سرورتون كجاست؟:گیج:

Hamid.zaeimpoor
دوشنبه 07 بهمن 1387, 13:33 عصر
با سلام
دستتون درد نكنه. ولي برنامه ي سرورتون كجاست؟:گیج:
فایل فشرده شده رو از حالت فشرده خارج کن یه فولدر به نام چت هستش فولدرو که باز کنی 2 تا فولدر توشه یکی سورس سرور یکیشم سورس خود برنام ست :متفکر:

Somayeh_Zamani
دوشنبه 07 بهمن 1387, 17:50 عصر
سلام
دستتون درد نكنه. خيلي جالب بود. ميشه بگيد اگه بخوان به هم فايل هم بفرستند و طرف مقابل بگيره و ذخيره كند، چطوري مي شه و ديگه اينكه اي كاش عكس هم رو مي تونستند ببيند و ديگه مثلا حالتهاي همديگه مثلا بيزي و ...
فكر كنم اگه اين طور باشه برنامه كامل تري از مسنجر مي شه.:چشمک:

Somayeh_Zamani
دوشنبه 07 بهمن 1387, 18:30 عصر
مي خوام سرور خودشم چت كنه. يعني با برنامه سرور چت كنم.:افسرده:

Armin060
دوشنبه 07 بهمن 1387, 18:59 عصر
فايل exe ويروس داره

Hamid.zaeimpoor
دوشنبه 07 بهمن 1387, 21:39 عصر
سلام
دستتون درد نكنه. خيلي جالب بود. ميشه بگيد اگه بخوان به هم فايل هم بفرستند و طرف مقابل بگيره و ذخيره كند، چطوري مي شه و ديگه اينكه اي كاش عكس هم رو مي تونستند ببيند و ديگه مثلا حالتهاي همديگه مثلا بيزي و ...
فكر كنم اگه اين طور باشه برنامه كامل تري از مسنجر مي شه.:چشمک:
بابا چه خبره یهو بگو یه کاریش کنیم که طرفو برداره بیاره کنار خودت باهاش رودررو بحرفی!!!!!:متعجب:

Hamid.zaeimpoor
دوشنبه 07 بهمن 1387, 21:41 عصر
فايل exe ويروس داره
دوست عزیز اگه از آنتی ویروس استفاده میکنی پوشه این برنامه رو استثنا کن این اشتبابه آنتی ویروسه.

Somayeh_Zamani
دوشنبه 07 بهمن 1387, 23:03 عصر
بابا چه خبره یهو بگو یه کاریش کنیم که طرفو برداره بیاره کنار خودت باهاش رودررو بحرفی!!!!!:متعجب:


سلام
خدا وكيلي مي تونيد بگيد چطوري موقع چت، فايل هم انتقال بديم؟ :لبخندساده:

Hamid.zaeimpoor
سه شنبه 08 بهمن 1387, 06:52 صبح
سلام
خدا وكيلي مي تونيد بگيد چطوري موقع چت، فايل هم انتقال بديم؟ :لبخندساده:
ببین این یه برنامه پایه هست در این برنامه همون طور که میتونی رشته بفرستی می تونی اطلاعات دیگه رو هم بفرستی چون اطلاعات به صورت بایت ارسال می شه و در سرور به نوع مربوطه تبدیل می شه در قسمت ارسال کلاینت یه حلقه می زاری و کل فایل رو توسط آرایه 1024 Byte ارسال می کنی و در سرور هم هیمن تغییرات رو بده:متفکر:

Somayeh_Zamani
سه شنبه 08 بهمن 1387, 09:16 صبح
ببین این یه برنامه پایه هست در این برنامه همون طور که میتونی رشته بفرستی می تونی اطلاعات دیگه رو هم بفرستی چون اطلاعات به صورت بایت ارسال می شه و در سرور به نوع مربوطه تبدیل می شه در قسمت ارسال کلاینت یه حلقه می زاری و کل فایل رو توسط آرایه 1024 Byte ارسال می کنی و در سرور هم هیمن تغییرات رو بده:متفکر:

سلام
من با سوكت پروگرمينگ تا حدودي آشنايي دارم و مفاهيم شبكه رو هم بلدم. داشتم به اين فكر مي كردم كه با پروتكل اف تي پي ابتدا بايد فايل رو، روي سرور آپلود كرده و سپس كلاينت با همون پروتكل فايل رو از سرور دانلود كنه.
اشتباست؟:افسرده:
مي‌شه لطفا اون كاري كه خودتون گفتيد رو انجام بديد. در سرور به چه نوعي تبديل كنيم. ممكنه فايل تكست باشه، ممكنه ام پي تري باشه، ممكنه عكس باشه. مي شه بگيد چه كار بايد بكنيم؟ بعد اينكه به هر حال يك كلاينت ديگر قرار فايل رو دانلود كرده و ذخيره كنه......:لبخندساده:

Somayeh_Zamani
سه شنبه 08 بهمن 1387, 11:04 صبح
براي اف تي پي كه آي پي وليد بايد داشته باشيم. :افسرده:

Hamid.zaeimpoor
سه شنبه 08 بهمن 1387, 13:28 عصر
سلام
من با سوكت پروگرمينگ تا حدودي آشنايي دارم و مفاهيم شبكه رو هم بلدم. داشتم به اين فكر مي كردم كه با پروتكل اف تي پي ابتدا بايد فايل رو، روي سرور آپلود كرده و سپس كلاينت با همون پروتكل فايل رو از سرور دانلود كنه.
اشتباست؟:افسرده:
مي‌شه لطفا اون كاري كه خودتون گفتيد رو انجام بديد. در سرور به چه نوعي تبديل كنيم. ممكنه فايل تكست باشه، ممكنه ام پي تري باشه، ممكنه عكس باشه. مي شه بگيد چه كار بايد بكنيم؟ بعد اينكه به هر حال يك كلاينت ديگر قرار فايل رو دانلود كرده و ذخيره كنه......:لبخندساده:


این یه چیزی هست تو مایه های همون چیزی که می خوای خانم:افسرده:...
در ضمن ربطی نداره که فایل عکس با یا موسیقی چون به صورت بایت ارسال میشه.
فقط قبل از اینکه از این برنامه استفاده کنی جاهایی که به رنگ سبز هست رو تکمیل کن.


کد کلاینت:


using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
namespace Client_Socket
{

class Program
{
static void Main(string[] args)
{
try
{
Console.WriteLine("That program can transfer small file. I've test up to 850kb file");
IPAddress[] ipAddress = Dns.GetHostAddresses("localhost");
IPEndPoint ipEnd = new IPEndPoint(ipAddress[0], 5656);
Socket clientSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);


string fileName = "Your File Name";
string filePath = "Your File Path";
byte[] fileNameByte = Encoding.ASCII.GetBytes(fileName);

byte[] fileData = File.ReadAllBytes(filePath + fileName);
byte[] clientData = new byte[4 + fileNameByte.Length + fileData.Length];
byte[] fileNameLen = BitConverter.GetBytes(fileNameByte.Length);

fileNameLen.CopyTo(clientData, 0);
fileNameByte.CopyTo(clientData, 4);
fileData.CopyTo(clientData, 4 + fileNameByte.Length);

clientSock.Connect(ipEnd);
clientSock.Send(clientData);
Console.WriteLine("File:{0} has been sent.", fileName);
clientSock.Close();
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine("File Sending fail." + ex.Message);
}

}
}
}
اینم کد سرور:


using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
namespace beginSocketServer
{

class Program
{
static void Main(string[] args)
{
try
{
Console.WriteLine("That program can transfer small file. I've test up to 850kb file");
IPEndPoint ipEnd = new IPEndPoint(IPAddress.Any, 5656);
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
sock.Bind(ipEnd);
sock.Listen(100);
Socket clientSock = sock.Accept();

byte[] clientData = new byte[1024 * 5000];
string receivedPath = "e:/";

int receivedBytesLen = clientSock.Receive(clientData);

int fileNameLen = BitConverter.ToInt32(clientData, 0);
string fileName = Encoding.ASCII.GetString(clientData, 4, fileNameLen);

Console.WriteLine("Client:{0} connected & File {1} started received.", clientSock.RemoteEndPoint, fileName);

BinaryWriter bWrite = new BinaryWriter(File.Open(receivedPath + fileName, FileMode.Append)); ;
bWrite.Write(clientData, 4 + fileNameLen, receivedBytesLen - 4 - fileNameLen);

Console.WriteLine("File: {0} received & saved at path: {1}", fileName, receivedPath);

bWrite.Close();
clientSock.Close();
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine("File Receiving fail." + ex.Message);
}
}
}
}

Somayeh_Zamani
سه شنبه 08 بهمن 1387, 15:50 عصر
سلام
برنامه سرور رو چطوري بايد به اون برنامه خودتون اد كنيم تا مشكل پيش نياد؟

Hamid.zaeimpoor
سه شنبه 08 بهمن 1387, 15:54 عصر
سلام
برنامه سرور رو چطوري بايد به اون برنامه خودتون اد كنيم تا مشكل پيش نياد؟
دوست عزیز این یه برنامه دیگست با اون یکی ارتباطی نداره این برنامه از نوع کنسول هست البته تو میتونی با اون یکی ترکیبش کنی یه چیز باهال دراری.:متفکر:

Somayeh_Zamani
سه شنبه 08 بهمن 1387, 16:38 عصر
دوست عزیز این یه برنامه دیگست با اون یکی ارتباطی نداره این برنامه از نوع کنسول هست البته تو میتونی با اون یکی ترکیبش کنی یه چیز باهال دراری.:متفکر:


استاد، خب من هم گفتم اگه مي شه بخش سرورشو تركيب كنيد، خيلي باحال مي‌شه. كلاينت اشو تركيب كردم اما سرورشو نمي دونم چي كار كنم؟:لبخند:

Somayeh_Zamani
سه شنبه 08 بهمن 1387, 21:31 عصر
دوست عزيز،
گويا قصد جواب دادن نداريد. خب من مي‌گم شما كه زحمتشو كشيديد اين قسمت رو هم خودتو اضافه كنيد. اگه مشكلي هست كه هيچ...:ناراحت:

el_abdollahi
سه شنبه 08 بهمن 1387, 22:27 عصر
سلام به دوستان
راستش من توي ارسال متن هم موندم.
ببينيد من دو تا برنامه دارم.يكي سرور و يكي كلاينت. كه ميخوام اين دو تا بتونن با هم چت كنن!
من واسه ارسال مشكلي ندارم ولي واسه دريافت.....
نميدونم چه كار كنم كه هميشه برنامه ها در حال گوش دادن باشن؟؟؟
كد دريافت رو توي تايمر گذاشتم ولي برنامه ها قفل كردن. ميرن تو مد گوش دادن
نميدونم كنترل BackgroundWorker به دردم ميخوره يا نه؟
منتظر كمك هاتون هستم....

Somayeh_Zamani
سه شنبه 08 بهمن 1387, 23:00 عصر
سلام به دوستان
راستش من توي ارسال متن هم موندم.
ببينيد من دو تا برنامه دارم.يكي سرور و يكي كلاينت. كه ميخوام اين دو تا بتونن با هم چت كنن!
من واسه ارسال مشكلي ندارم ولي واسه دريافت.....
نميدونم چه كار كنم كه هميشه برنامه ها در حال گوش دادن باشن؟؟؟
كد دريافت رو توي تايمر گذاشتم ولي برنامه ها قفل كردن. ميرن تو مد گوش دادن
نميدونم كنترل BackgroundWorker به دردم ميخوره يا نه؟
منتظر كمك هاتون هستم....

سلام
برنامه ها در حال گوش دادن نيستن. فقط سرور به پورت گوش مي ده. و كسي رو كه درخواست كانكت شدن را داد، اكسپت مي كنه.

موفق و مويد باشيد

el_abdollahi
چهارشنبه 09 بهمن 1387, 08:18 صبح
منظورم كد دريافت اطلاعات هست.
اين رو كجا بزارم؟


NetworkStream s=client.GetStream();
BinaryReader r=new BinaryReader(s);
string msg=r.ReadString();


اين كد واسه دريافت اطلاعات هست. بايد به محض ارسال متن توسط هر كامپيوتر، كامپيوتر ديگه توسط اين كد اون متن رو دريافت كنه!
اين كد رو كجا بزارم؟؟؟

el_abdollahi
چهارشنبه 09 بهمن 1387, 12:07 عصر
يعني كسي نميدونه؟
خانم زماني شما كه گفتي با انتقال متن مشكل نداري! خوب به من هم بگو ديگه....

Somayeh_Zamani
چهارشنبه 09 بهمن 1387, 12:53 عصر
خدمت جناب الهام خانوم عرض كنم كه
خب يه تايمر بذار كه اگه رشته دريافتيد نامساوي تهي بود بگو تو ليست باكس چاپ كنه.
:عصبانی++:

بعدشم بايد توي فرم لود اين كدو بذاري

Thread yek esm= new Thread(new ThreadStart(esme tabe daryafte matn));

و در تابع دريافت متنت هست كه متن رو مي دريافتي .
و زير اين خط هم كه در بالا نوشتم،‌اينيبل تايمر رو ترو كن ديگه.:لبخند:

el_abdollahi
چهارشنبه 09 بهمن 1387, 23:12 عصر
ولي باز هم كه هر دو برنامه قفل ميكنه!!!
نظر ديگه اي كسي نداره؟

Somayeh_Zamani
پنج شنبه 10 بهمن 1387, 00:50 صبح
قفل نميكنه ببين كجاش رو اشتباه كردي.
قفل نمي كنه.

Amir Oveisi
پنج شنبه 10 بهمن 1387, 14:12 عصر
نميدونم چه كار كنم كه هميشه برنامه ها در حال گوش دادن باشن؟؟؟

برای اینکار میتونین از TcpListener استفاده کنید.

موفق باشید
jooje

Somayeh_Zamani
پنج شنبه 10 بهمن 1387, 19:52 عصر
برای اینکار میتونین از TcpListener استفاده کنید.

موفق باشید
jooje

دستتون درد نكنه ولي منظور اين بنده خدا يك كلمه ي تي سي پي ليسنر نبود.

jooje

Amir Oveisi
جمعه 11 بهمن 1387, 00:37 صبح
یه جستجو در موردش انجام بدن تو google بهترین جوابها رو پیدا خواهند کرد

arashmidos2020
سه شنبه 06 مرداد 1388, 00:26 صبح
سلام.می دونم که برای داشتن یک سرور و چند کلاینت همزمان باید از Multi thread استفاده کرد.اما چطوری؟
اگه یک سرنخ بدین ممنون میشم.

obscure
سه شنبه 06 مرداد 1388, 09:01 صبح
سلام.واسه اینکه برنامه همیشه در حال گوش کردن باشه و منتظر جواب باشه من از یه تایمر استفاده کردم که در هر ثانیه 10 بار چک میکنه که آیا پیامی از طرف مقابل ارسال شده یا نه...در ضمن پروژه برنامه سازی شبکه خودمم واستون میزارم که از همین روش استفاده کردم.