Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Lỗi gởi dữ liệu không nhận đúng trong lập trình socket C#?

  1. #1
    Ngày gia nhập
    04 2011
    Bài viết
    6

    Mặc định Lỗi gởi dữ liệu không nhận đúng trong lập trình socket C#?

    Mô tả lỗi:
    Sau khi kết nối thành công, bên phía máy chủ, nhắn "eeeeeeeeee" (10 chữ "e"), rồi bên phía client nhắn lại "chao" thì bên ô tin nhắn của máy chủ sẽ hiện là "eeee" chứ không phải là "chao" (hoặc nếu client gởi tin nhắn có số kí tự lớn hơn của server (10 kí tự) thì sẽ báo lỗi). Nếu bên phía client chat tiếp "hello" thì bên máy chủ lại hiện đúng "hello". Mọi người xem giúp em là lỗi gì ạ, em sửa mãi mà không được. Em cảm ơn nhiều

    Code như sau:

    Server
    ---------------------------------------------------------

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Net;
    using System.Net.Sockets;
    using System.Threading;
    namespace server
    {
    public partial class Form1 : Form
    {
    Socket server;
    public Form1()
    {

    InitializeComponent();

    String tn = textBox2.Text;
    Thread a = new Thread(new ThreadStart(ketnoi));
    a.Start();
    }
    byte[] buff;
    Socket client;

    public void ketnoi()
    {
    server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 5000);
    server.Bind(ipep);
    server.Listen(10);
    ShowMessage("Dang cho ket noi");
    client = server.Accept();

    IPEndPoint clientep = (IPEndPoint)client.RemoteEndPoint;
    ShowMessage("ket noi thanh cong toi " + clientep.Address);

    buff = new byte[1024];
    buff = Encoding.ASCII.GetBytes("thanh cong");
    client.Send(buff, buff.Length, SocketFlags.None);



    int bytenhan;
    while (true)
    {
    //nhan tin nhan
    buff = new byte[1024];
    bytenhan = client.Receive(buff);
    ShowMessage("Client: "+Encoding.ASCII.GetString(buff, 0, bytenhan));

    }

    client.Close();
    server.Close();
    }


    public delegate void DGShowMessage(string msg);
    public void ShowMessage(string msg)
    {
    if (this.InvokeRequired) this.Invoke(new DGShowMessage(ShowMessage), msg);
    else textBox1.Text += msg + "\r\n";
    msg = "";
    }
    public void goitin(string s)
    {
    buff = new byte[1024];
    buff = Encoding.ASCII.GetBytes(s);
    client.Send(buff, buff.Length, SocketFlags.None);

    }
    private void button2_Click(object sender, EventArgs e)
    {


    if (textBox2.Text != "")
    {

    goitin(textBox2.Text);
    textBox1.Text += "May chu: " + textBox2.Text + "\r\n";
    }
    textBox2.Text = "";
    }
    }
    }


    Client
    --------------------------------------------------------------------------
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Net;
    using System.Net.Sockets;
    using System.Threading;

    namespace client
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }


    byte[] buff;
    Socket server;
    public void ketnoi()
    {

    IPEndPoint ipep =new IPEndPoint(IPAddress.Parse("127.0.0.1"),5000);
    server = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    try
    {
    server.Connect(ipep);
    }
    catch
    {
    hienthitn("khong the ket noi toi server");
    return;
    }

    while (true)
    {
    buff = new byte[1024];
    int recei = server.Receive(buff);
    string s = Encoding.ASCII.GetString(buff, 0, recei);
    hienthitn("May chu: "+s);
    }

    server.Shutdown(SocketShutdown.Both);
    server.Close();
    }


    private void button1_Click(object sender, EventArgs e)
    {
    Thread a = new Thread(new ThreadStart(ketnoi));
    a.Start();
    }

    public delegate void tinnhan(string tn);
    public void hienthitn(string tn)
    {
    if (this.InvokeRequired) this.Invoke(new tinnhan(hienthitn), tn);
    else textBox1.Text += tn + "\r\n";
    }
    public void goitin(string s)
    {
    server.Send(Encoding.ASCII.GetBytes(s));

    }
    private void button2_Click(object sender, EventArgs e)
    {

    if (textBox2.Text!= "")
    {
    hienthitn("Client: " + textBox2.Text);
    goitin(textBox2.Text);

    }
    textBox2.Text = "";
    }
    }
    }

  2. #2
    Ngày gia nhập
    03 2010
    Bài viết
    72

    Bạn làm thử vầy nha,mình làm vầy dùng StreamReader và StreamWriter để gửi nhận thấy OK (gửi nhận chuỗi luôn không cần chuyển byte)
    Code:
    
    Socket Client=server.Accept();
    NetworkStream ns=new NetworkStream(client);
    StreamReader sr=new StreamReader(ns);
    StreamWriter sw=new StreamWriter(ns);
    String s="Wellcome to server)
    sw.WriteLine(s);  //Gui chuoi s cho client
    sw.Flush()          //
    Bên client bạn cũng tạo sw và sr như vậy nhưng nhận chuỗi từ Server bằng cách
    Code:
    String data=sr.ReadLine();
    Nhớ
    using System.IO;

  3. #3
    Ngày gia nhập
    04 2011
    Bài viết
    6

    HI. Cảm ơn bạn nhiều lắm, mình làm được rồi. Cảm ơn rất nhiều

Các đề tài tương tự

  1. Socket Cách phân biệt dữ liệu là gửi file hay gửi tin nhắn trong lập trình socket
    Gửi bởi tuanngocpt trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 19-10-2012, 09:27 PM
  2. Socket 2 tiểu trình tranh chấp nhận dữ liệu trong socket
    Gửi bởi bvb1992 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 02-05-2012, 06:23 PM
  3. Lập trình socket trong C#, client không nhận được dữ liệu?
    Gửi bởi phthinh trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 17-08-2011, 01:54 PM
  4. Xuất không đúng với dữ liệu nhập vào trong C#
    Gửi bởi duyphuong16_8 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 7
    Bài viết cuối: 07-06-2011, 02:01 PM
  5. Bài tập C++ Gửi nhận chuỗi text có dấu trong MFC qua socket?
    Gửi bởi feeliwood trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 09-05-2011, 12:08 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn