Mijozlar qismi
Mijoz tomoni faqat TcpClient sinfidan foydalanadi.
Biz faqat ikkilik ma'lumotlarni TCP protokoli orqali uzata olamiz. Shuning uchun, TcpClient sinfining ob'ektini ishga tushirgandan so'ng, ikkilik ma'lumotlarni o'qish va yozish uchun bir qator baytlarni tayyorlashingiz, shuningdek, uzatish uchun oqimni ochishingiz kerak.
Quyidagi misolda ma'lumotlarni uzatish uchun tayyorgarlik bosqichi ko'rsatilgan (serverga yuborilgan mag'lubiyat xabari qatoriga aylantiriladi):
TcpClient client = new TcpClient(address, port);
Byte[ ] data = Encoding.UTF8.GetBytes(outMessage);
NetworkStream stream = client.GetStream();
Xuddi shu narsa, lekin ma'lumot olish uchun:
TcpClient client = new TcpClient(address, port);
Byte[] data = new Byte[256];
NetworkStream stream = client.GetStream();
Ma'lumotlar serverga Write usuli yordamida yuboriladi.
stream.Write(data, 0, data.Length);
Birinchi parametr sifatida u yuborilgan ikkilik ma'lumotni qabul qiladi, ikkinchi parametr bayt massivining boshidan boshlab ofsetni o'rnatadi (undan bayt uzatishni boshlash kerak, odatda nolga teng (bayt massivi to'liq yuboriladi)), uchinchi parametr - ikkilik ma'lumotlarning hajmi (bu misolda baytlar massivi to'liq uzatiladi).
Ma'lumotni olish ancha murakkab. Biz ularning haqiqiy hajmini bilmaymiz va shuning uchun ularni tugaguniga qadar tsiklda o'qishimiz kerak.
Quyida, misol sifatida satr yordamida serverdan ma'lumotlarni qabul qilish misoli keltirilgan.
string responseData = String.Empty;
StringBuilder completeMessage = new StringBuilder();
int numberOfBytesRead = 0;
do
{
numberOfBytesRead = stream.Read(readingData, 0,readingData.Length);
completeMessage.AppendFormat("{0}", Encoding.UTF8.GetString(readingData, 0, numberOfBytesRead));
}
while (stream.DataAvailable);
responseData = completeMessage.ToString();
Oqimda ma'lumotlar mavjud ekan (DataAvailable xususiyati true ga teng), serverdan olingan satr StringBuilder klassi yordamida asta-sekin joriy takrorlash paytida buferga o'qilgan ma'lumotlar bilan shakllanadi. Barcha ma'lumotlar o'qilgandan so'ng, oqimdan tayyor satr xabari qaytariladi.
Uzatish yoki qabul qilish tugagandan so'ng, oqim va tarmoq ulanishi yopilishi kerak.
stream.Close();
client.Close();
Quyida umuman server bilan ma'lumotlar almashish jarayonini aks ettiruvchi misol keltirilgan.
private string Exchange(string address, int port, string outMessage)
{
// Aloqani o`rnatish
TcpClient client = new TcpClient(address, port);
Byte[] data = Encoding.UTF8.GetBytes(outMessage);
NetworkStream stream = client.GetStream();
try
{
// Habar jo`natish
stream.Write(data, 0, data.Length);
// Javobni qabul qilish
Byte[] readingData = new Byte[256];
String responseData = String.Empty;
StringBuilder completeMessage = new StringBuilder();
int numberOfBytesRead = 0;
do
{
numberOfBytesRead = stream.Read(readingData, 0, readingData.Length);
completeMessage.AppendFormat("{0}", Encoding.UTF8.GetString(readingData, 0, numberOfBytesRead));
}
while (stream.DataAvailable);
responseData = completeMessage.ToString();
return responseData;
}
finally
{
stream.Close();
client.Close();
}
}
Do'stlaringiz bilan baham: |