Ứng dụng chat peer-to-peer
Em chào mọi người!
Em đang tập làm quen với lập trình mạng win form bằng C#. Cụ thể đây là chương trình em học theo trên mạng, viết ứng dụng chat peer-to-peer trong mạng LAN. Em đã chạy được ứng dụng một cách bình thường, nhưng lúc thử test tới vụ gõ tiếng Việt thì nó hoàn toàn không hiển thị đúng tiếng Việt bên người nhận (dù bên gửi hiển thị tiếng Việt bình thường).
Em đã chụp màn hình lại kèm với code bên dưới. Em thử chỗ tô đậm bên dưới bằng Encoding.UTF.GetString(sendingMessage);
nhưng vẫn không thể hiển thị đúng tiếng Việt. Mong mọi người xem qua và giúp đỡ! Thanks.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
namespace ChatLAN
{
public partial class frm_ChatLAN : Form
{
Socket sck;
EndPoint epLocal, epRemote;
byte[] buffer;
public frm_ChatLAN()
{
InitializeComponent();
}
private void frm_ChatLAN_Load(object sender, EventArgs e)
{
// Set up Socket
sck = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
sck.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
//Set up IP
txt_MineIP.Text = GetLocalIP();
txt_OtherIP.Text = GetLocalIP();
}
private void btn_Connect_Click(object sender, EventArgs e)
{
//binding Socket
epLocal = new IPEndPoint(IPAddress.Parse(txt_MineIP.Text), Convert.ToInt32(txt_MinePort.Text));
sck.Bind(epLocal);
//Connecting to remote IP
epRemote = new IPEndPoint(IPAddress.Parse(txt_OtherIP.Text), Convert.ToInt32(txt_OtherPort.Text));
sck.Connect(epRemote);
//Listening the specific port
buffer = new byte[1500];
sck.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref epRemote, new AsyncCallback(MessageCallBack), buffer);
}
private void MessageCallBack(IAsyncResult aResult)
{
try
{
byte[] receiveData = new byte[1500];
receiveData = (byte[])aResult.AsyncState;
//Converting byte[] to string
ASCIIEncoding aEncoding = new ASCIIEncoding();
string receiveMessage = aEncoding.GetString(receiveData);
//Adding this message into ListBox
lst_show.Items.Add("Friend: " + receiveMessage);
buffer = new byte[1500];
sck.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref epRemote, new AsyncCallback(MessageCallBack), buffer);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void btn_send_Click(object sender, EventArgs e)
{
//Convert string message to byte[]
ASCIIEncoding aEncoding = new ASCIIEncoding();
byte[] sendingMessage = new byte[1500];
sendingMessage = aEncoding.GetBytes(txt_typing.Text);
//Sending the Encoded message
sck.Send(sendingMessage);
//Adding to the listbox
> lst_show.Items.Add("Me: " + txt_typing.Text);
txt_typing.Text = "";
}
private void txt_typing_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyCode==Keys.Enter)
{
btn_send.PerformClick();
}
}
private string GetLocalIP()
{
IPHostEntry host;
host = Dns.GetHostEntry(Dns.GetHostName());
foreach (IPAddress ip in host.AddressList)
{
if (ip.AddressFamily == AddressFamily.InterNetwork)
return ip.ToString();
}
return "127.0.0.1";
}
}
}
Sử dung UTF8 để mã hóa và giải mã byte[]/string. ASCII thì sao mà có Tiếng Việt ?
Cám ơn bạn!
Hồi tối này vừa post câu hỏi lên, sau đó ngồi đọc kĩ lại thì thấy xàm thật!