السلام عليكم ورحمة الله ،
انا مبتدئ في برمجة الشبكات و لدي بعض الاسئلة
(اللغة المستخدمة – السي شارب)
من دروس الاخ فادي و من درس الاخ معتز شمس (فيديو)
الجزء الخاص ب Client
CODE
using System.Net.Sockets;
using System.IO;
private void button1_Click(object sender, System.EventArgs e)
{
try
{
TcpClient myclient = new TcpClient ("127.0.0.1",5000); // الإتصال مع السيرفر
NetworkStream mynetsream = tcpclnt.GetStream ();
StreamWriter myswrite = new StreamWriter (mynetsream);
mynetsream .WriteLine(txt_msg.Text);
myswrite.Close ();
mynetsream .Close ();
myclient.Close ();
}
catch (Exception ex)
{
MessageBox.Show (ex.Message );
}
}
الجزء الخاص ب Server
CODE
using System.Net.Sockets;
using System.IO;
TcpListener mytcpl; // Objects Declaration
Socket mysocket;
NetworkStream myns;
StreamReader mysr;
mytcpl = new TcpListener (5000); // Open The Port
mytcpl.Start ();// Start Listening on That Port
mysocket = mytcpl.AcceptSocket (); // Accept Any Request From Client and Start a Session
myns = new NetworkStream (mysocket);// Receives The Binary Data From Port
mysr = new StreamReader (myns); // Convert Received Data to String
MessageBox.Show (mysr.ReadLine()); // Print The Message
mytcpl.Stop();
يفضل اضافة هذه الميثود عند الحدث الخاص بإغلاق البرنامج
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
try
{
mytcpl.Stop ();
Application.Exit();
}
catch (Exception ex) {MessageBox .Show (ex.Message );}
}برنامج خادم/عميل بسيط ،
البرنامج واضح ،
لكن عند القراءة في الكتب و المصادر ،
شيء مثل هذا
Here’s a sample of C# server code that sets up the necessary socket pieces: IPHostEntry local = Dns.GetHostByName(Dns.GetHostName()); IPEndPoint iep = new IPEndPoint(local.AddressList[0], 8000); Socket newserver = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); newserver.Bind(iep); newserver.Listen(5); Socket newclient = newserver.Accept();
جزء خاص ببرنامج سيرفر بسيط ،
لكن الطريقة مختلفة ،
تم استخدام دوال ال Bind و ال Listen ،
اين هذه الدوال في الطريقة الاولى ؟
و لم هذا الاختلاف ؟؟
هل نستطيع القول انه هناك طريقتين لبرمجة الشبكات ؟
في الطريقة الاولى استخدمنا ما يسمى ب C# Socket Helper Classes
ارجو التوضيح .
--
و شي ثاني
هنا كود اخر مماثل للطريقة الاولى
TcpClient newclient = new TcpClient("www.isp.net", 8000);
NetworkStream ns = newclient.GetStream();
byte[] outbytes = Encoding.ASCII.GetBytes("Testing");
ns.Write(outbytes, 0, outbytes.Length);
byte[] inbytes = new byte[1024];
ns.Read(inbytes, 0, inbytes.Length);
string instring = Encoding.ASCII.GetString(inbytes);
Console.WriteLine(instring);
ns.Close();
newclient.Close();'لماذا في المثال الاول ، (مثال الاخ فادي )
لم نستخدم عمليات ال Encoding ؟؟
شي اخير ،
في مثال الاخ فادي ،
لنقل الرسالة استخدمنا
NetworkStream mynetsream = tcpclnt.GetStream (); StreamWriter myswrite = new StreamWriter (mynetsream);
و لكن عند نقل ملف (صورة مثلا )
يكون العمل هكذا
Stream fileStream = File.OpenRead(tbFilename.Text); // Alocate memory space for the file byte[] fileBuffer = new byte[fileStream.Length]; fileStream.Read(fileBuffer, 0, (int)fileStream.Length); // Open a TCP/IP Connection and send the data TcpClient clientSocket = new TcpClient(tbServer.Text,8080); NetworkStream networkStream = clientSocket.GetStream(); networkStream.Write(fileBuffer,0,fileBuffer.GetLength(0))
لماذا هنا لم نستخدم StreamWriter ؟
و تعاملنا مباشرة مع ال NetworkStream
==
كنت اتمنى لو اني كنت موجود ايام بداية دورة الاخ فادي .
جزاكم الله كل خير ،