نمایش نتایج 1 تا 15 از 15

نام تاپیک: مشکل با سوکت در روش TCP

  1. #1

    مشکل با سوکت در روش TCP

    سلام دوستان
    من برای طراحی پروژه ام یک مینی پروژه ساختم که بتوانم با استفاده از روش TCP کلاینت و سرور به هم پیام رسانی کنند، در این روش کانکت به درستی انجام میگیره و ارسال از کلاینت به درستی به سرور میرسه... مشکل اینجاست که بلد نیستم از سرور به کلاینت چیزی بفرستم
    نمونه برنامه رو هم اینجا میذارم که بگید کجاش تغییرات میخواد...
    قبلا متشکرم

    اینم لینک دانلود:
    https://barnamenevis.org/attach...8&d=1283429236

  2. #2
    کاربر دائمی آواتار ricky22
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    شیراز
    پست
    1,591

    نقل قول: مشکل با سوکت در روش TCP

    سلام من پروژه شما را نگاه نکردم اما شاید این 2 لینک مفید باشه.
    http://www.switchonthecode.com/tutor...ded-tcp-server
    http://www.codeproject.com/KB/IP/hig...ce-server.aspx

  3. #3

    نقل قول: مشکل با سوکت در روش TCP

    نقل قول نوشته شده توسط ricky22 مشاهده تاپیک
    سلام من پروژه شما را نگاه نکردم اما شاید این 2 لینک مفید باشه.
    http://www.switchonthecode.com/tutor...ded-tcp-server
    http://www.codeproject.com/KB/IP/hig...ce-server.aspx
    لطفا اگه میتونی همین برنامه من رو کامل کنید...
    من گیر کردم بد رقم

  4. #4
    کاربر دائمی آواتار ricky22
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    شیراز
    پست
    1,591

    نقل قول: مشکل با سوکت در روش TCP

    نقل قول نوشته شده توسط ferferi مشاهده تاپیک
    لطفا اگه میتونی همین برنامه من رو کامل کنید...
    من گیر کردم بد رقم
    شما عجالتا 2 لینکی که گزاشتم مشاهده بفرمایید.
    سورس آماده
    تمیز
    بدون باگ
    با توضیحات
    بعد اگر مشکلت حل نشد دوباره مطرح بفرمایید

  5. #5

    نقل قول: مشکل با سوکت در روش TCP

    نقل قول نوشته شده توسط ricky22 مشاهده تاپیک
    شما عجالتا 2 لینکی که گزاشتم مشاهده بفرمایید.
    سورس آماده
    تمیز
    بدون باگ
    با توضیحات
    بعد اگر مشکلت حل نشد دوباره مطرح بفرمایید
    آقا شرمنده، نه تنها این کد، کدهای زیادی دیدم
    ولی مشکلم حل نشد
    من کد TCP میخوام که با سنکرن کارکنه
    شما که تو برنامه نویسی استاد هستید اگه میشه یه کد کامل برام بذاری که ساده باشه و به آسونی کلاینت و سرور به هم اطلاعات بفرستند ممنونت میشم

  6. #6

    نقل قول: مشکل با سوکت در روش TCP

    الان برنامه رو ساده تر کردم
    کسی میتونه این سیستم رو درست کنه؟
    اگه کسی تونست فوری بگه، تا جایی که بتونم جبران میکنم

    توضیح:
    یک سیستم هستش که هم به عنوان سرور و هم به عنوان کلاینت کار میکنه (یعنی باید کار کنه)
    کار نمیکنه!

    sc3.zip‏ (41.1 کیلوبایت, 0 دیدار)

  7. #7
    VIP آواتار Sajjad.Aghapour
    تاریخ عضویت
    مهر 1386
    محل زندگی
    اهل کاشانم .. روزگارم بد نیست
    پست
    1,265

    نقل قول: مشکل با سوکت در روش TCP

    مشکلتون چیه دوست عزیز؟ لطفا به جای قرار دادن پروژه مشکلتون رو بیان کنید

    شما میتونید از Server به Client پیام بفرستید ولی برعکس نمیتونید.مگه پروسه ارسال باهم فرقی هم میکنه؟
    Close your eyes, take a deep breath, click your heels three times, and say, "There's no better thing than Inversion of Control and Dependency Injection, generic specialization, the decorator pattern, chains of responsibilities, and extensible software."

  8. #8

    نقل قول: مشکل با سوکت در روش TCP

    خوب مشکل من هم همینه، ضمن اینکه من پروژه ام را نگذاشتم، یک سمپل گذاشتم

     public partial class Form1 : Form
    {
    public Socket clientSocket;
    public Socket serverSocket;
    public byte[] byteData = new byte[1024];

    public Form1()
    {
    InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
    button1.Enabled = checkBox1.Enabled = false;
    if (checkBox1.Checked)
    {
    serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

    IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 1600);

    serverSocket.Bind(ipEndPoint);
    serverSocket.Listen(4);

    serverSocket.BeginAccept(new AsyncCallback(OnAccept), null);
    }
    else
    {
    clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

    IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
    IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 1600);
    clientSocket.BeginConnect(ipEndPoint, new AsyncCallback(OnConnect), null);

    }
    }
    private void OnAccept(IAsyncResult ar)
    {

    Socket clientSocket = serverSocket.EndAccept(ar);

    serverSocket.BeginAccept(new AsyncCallback(OnAccept), null);

    clientSocket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None,new AsyncCallback(OnReceive_s), clientSocket);
    }
    private void OnReceive_s(IAsyncResult ar)
    {

    Socket clientSocket = (Socket)ar.AsyncState;
    clientSocket.EndReceive(ar);

    Data msgReceived = new Data(byteData);
    textBox2.Text += msgReceived.TextMessage;

    Data msgToSend = new Data();
    msgToSend.TextMessage = textBox1.Text;
    byteData = msgToSend.ToByte();
    clientSocket.BeginSend(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(OnSend_s), null);


    }
    public void OnSend_s(IAsyncResult ar)
    {

    //Socket client = (Socket)ar.AsyncState;
    //client.EndSend(ar);
    serverSocket.EndSend(ar);
    }
    private void OnReceive(IAsyncResult ar)
    {

    clientSocket.EndReceive(ar);

    Data msgReceived = new Data(byteData);

    if (msgReceived.TextMessage != null)
    //textBox2.Text += msgReceived.TextMessage + "\r\n";
    MessageBox.Show(msgReceived.TextMessage);
    byteData = new byte[1024];

    clientSocket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(OnReceive), null);


    }
    private void OnConnect(IAsyncResult ar)
    {

    clientSocket.EndConnect(ar);

    Data msgToSend = new Data();
    msgToSend.TextMessage = null;
    byte[] b = msgToSend.ToByte();

    clientSocket.BeginSend(b, 0, b.Length, SocketFlags.None, new AsyncCallback(OnSend), null);
    }
    private void OnSend(IAsyncResult ar)
    {

    clientSocket.EndSend(ar);
    //DialogResult = DialogResult.OK;
    }

    private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
    if (checkBox1.Checked)
    {
    }
    else
    {
    clientSocket.Close();
    }
    }

    private void button2_Click(object sender, EventArgs e)
    {

    Data msgToSend = new Data();
    msgToSend.TextMessage = textBox1.Text;

    byteData = msgToSend.ToByte();

    clientSocket.BeginSend(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(OnSend), null);

    byteData = new byte[1024];
    clientSocket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(OnReceive), null);

    }
    }

  9. #9
    VIP آواتار Sajjad.Aghapour
    تاریخ عضویت
    مهر 1386
    محل زندگی
    اهل کاشانم .. روزگارم بد نیست
    پست
    1,265

    نقل قول: مشکل با سوکت در روش TCP

    منظور من هم این بود این دو پروسه در Server و Client تفاوتی با همدیگر ندارند....

    اگه پروتکل مورد نظر برای ارسال TCP هستش(که در اینجا باید TCP باشه) بهتر هست از TcpClient استفاده کنید.

    برای رسیدن به جوابتون به Chat Application هایی که در نت همراه با آموزش گذاشته شده نگاهی بندازید....
    Close your eyes, take a deep breath, click your heels three times, and say, "There's no better thing than Inversion of Control and Dependency Injection, generic specialization, the decorator pattern, chains of responsibilities, and extensible software."

  10. #10

    نقل قول: مشکل با سوکت در روش TCP

    از اینکه جواب دادید ممنونم
    اما من خودم الان بیش از 20تا برنامه دانلود کردم، ولی مشکلم حل نشده
    شما یک توضیح کلی دادید
    اگه میتونید کمکم کنید خواهشا کدها رو یک نگاه بندازید و از روی کد کمکم کنید، با دیدن برنامه های مختلف مشکلم حل نشده، یا اگه میتونید یک تک برنامه بهم معرفی کنید که هم کلاینت بشه و هم سرور و با TCP بتونه پیام ارسال کنه.
    اگرم واسم درست کنی و بذاری اینجا ممنونت میشم، مشکلم اینجاست که همچین برنامه ای ندیدم!

  11. #11
    کاربر دائمی آواتار ricky22
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    شیراز
    پست
    1,591

    نقل قول: مشکل با سوکت در روش TCP

    هم سرور به کلاینت پیام میده هم بر عکس
    http://www.codeproject.com/KB/IP/TCPIPChat.aspx
    http://www.codeproject.com/KB/IP/ipchat.aspx

  12. #12
    VIP آواتار Sajjad.Aghapour
    تاریخ عضویت
    مهر 1386
    محل زندگی
    اهل کاشانم .. روزگارم بد نیست
    پست
    1,265

    نقل قول: مشکل با سوکت در روش TCP

    1. با توجه به حرفی که قبلا زدم بهتر هست در اینجا از TcpClient استفاده کنید
    2. چون برنامه های مختلفی رو دیدید به مشکل برخوردید.درحالیکه اگر یک مطلب کلی برای اونها میخوندید و اصول ارسال و دریافت رو درک میکردید به این مشکل برنمیخوردید
    3. مثالی اولی که جناب ricky22 لینکش رو گذاشتن تا قبل از قسمت Creating the Server بخونید
    4. یک نمونه از ارسال میتواند این باشد

    //_client = tcpListener.AcceptTcpClient();
    private void SendMessage(string msg)
    {
    try
    {
    NetworkStream ns;
    lock (_client.GetStream())
    {
    ns = _client.GetStream();
    }

    byte[] bytesToSend = Encoding.ASCII.GetBytes(msg);
    ns.Write(bytesToSend, 0, bytesToSend.Length);
    ns.Flush();
    }
    catch (Exception ex)
    {
    Console.WriteLine(ex.ToString());
    }
    }


    5. بحث های فنی زیادی در رابطه با ارسال و دریافت پیام در TCP وجود دارد.برای مثال اینکه یک پیغام به سه طریق ممکن است به دست مقصد برسد و برای مشخص کردن این روش باید پروتکلی تعریف شود و در هر دو طرف با توجه به این پروتکل پیغام دریافت شود.

    پیشنهاد میکنم به یک منبع معتبر در زمینه برنامه نویسی Socket و راهکارهای آن مراجعه کنید/

    موفق باشید/
    Close your eyes, take a deep breath, click your heels three times, and say, "There's no better thing than Inversion of Control and Dependency Injection, generic specialization, the decorator pattern, chains of responsibilities, and extensible software."

  13. #13

    نقل قول: مشکل با سوکت در روش TCP

    sajjadlove جان ممنونم، آقای ricky22 شما هم ممنون که توجه میکنید
    نمونه برنامه ها را قبلا دیده بودم، و ضمن اینکه من فرصت ندارم مطلب کلی بخونم، پروژه ام همینجوری طول داده شده، حرف شما درسته
    حالا من یک مثال میزنم و شما این مثال من را کامل کنید:
    دستورات کلید کانکت:
    private void button1_Click(object sender, EventArgs e) //connect
    {

    ip = IPAddress.Parse("127.0.0.1");
    port = new IPEndPoint(ip, Int32.Parse("1600"));
    socket = new Socket(ip.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

    if (checkBox1.Checked)
    {
    socket.Bind(port);
    socket.Listen(-1);

    socket.Accept();
    MessageBox.Show("Connect to Client is OK", "Server");

    }
    else
    {
    socket.Connect(port);
    MessageBox.Show("Connect to Server is OK", "Client");

    }
    }
    و این هم دستور بسته شدن سوکت در خروج از فرم
            private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
    socket.Close();
    }
    و این هم دستور ارسال متن textbox به application دیگر
    private void button2_Click(object sender, EventArgs e)
    {
    byte [] buffer = new byte [1024];

    if (checkBox1.Checked)
    {
    buffer = Encoding.UTF8.GetBytes(textBox1.Text);
    socket.Send(buffer);
    }
    else
    {
    buffer = Encoding.UTF8.GetBytes(textBox1.Text);
    socket.Send(buffer);
    }
    }

    خوب 2 تا مساله هست، یکی اینکه میخوام سند رو رسیو درست بشه و دوم اینکه بصورت آسنکرون باشه
    فعلا اولی رو حل کنیم، برای دومی راه دارم، یعنی یک سند و رسیو برای این برنامه درست کنید که بدون مشکل باشه

  14. #14
    کاربر دائمی آواتار C Sharp
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    System.Object
    پست
    101

    نقل قول: مشکل با سوکت در روش TCP

    اینو خیلی ساده سعی کردم واستون بنویسم ، یه چکی کنید اگه سوالی داشتین بپرسید
    فایل های ضمیمه فایل های ضمیمه

  15. #15

    نقل قول: مشکل با سوکت در روش TCP

    کاش میتونستم هزارتا تشکر بزنم
    دیگه داشتم نا امید میشدم!
    الان نگاهش میکنم، میدونی چکار کردم؟ داشتم توی نرم افزار از دوتا پورت استفاده میکردم!!!
    به هر حال مرسی

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •