shahriar.shahrashoob
شنبه 06 فروردین 1390, 01:04 صبح
با سلام و عرض ادب
میبخشید سوالی داشتم درباره برنامه نویسی سیشارپ تحت شبکه.خیلی لطف میکنید اگه پاسخ بدید.
دارم برنامه ی برگزاری آزمون تحت شبکه مینویسم.روند این برنامه این گونه است که سوالات از دیتابیس سروربه دست من برنامه نویس میرسه و بنده باید این سوالات رو در فرمی که کاربر مشاهده میکند، نمایش بدم و کاربر اونها را جواب بده.سوالات میتونه تستی تشریحی و یا ترسیمی با پینت باشه.بعد از پاسخ کاربر جوابها توسط من برنامه نویس برای سرور ارسال میشه تا در سرور عمل قضاوت بشه یا بهتر بگم جوابها صحیح بشه و نمره محاسبه بشه و مجددا کارنامه برای کاربر ارسال بشه.
سوال اول:طبق دستور العمل ما،تاریخ برگزاری امتحان و نام امتحان و زمان امتحان و تمامی سوالات بایستی از سرور برای من ارسال شود تا من در فرم اصلی برنامه جهت نمایش استفاده کنم.از دوستی شنیدم که ارسال این اطلاعات بوسیله زبان xml بواسطه تگ بندی این زبان و ارتباط با سیشارپ قابل حصوله.ولی من xmlبلد نیستم.چه راهی رو بهم پیشنهاد میکنید؟چطور میتونم تاریخ برگزاری امتحان و نام امتحان و زمان امتحان و تمامی سوالات را ارسال کنم بطوریکه سوالات پس از پاسخ دادن کاربر،یکی یکی عوض شود؟
سوال دوم:کدی دارم که ارتباط بین سرور و کلاینت را برقرار میکند.اما این کد تحت کنسول نوشته شده.اساسا چه تفاوتی بین کد تحت کنسول و تحت فرم ویندوزی وجود داره؟آیا میشه از کد تحت کنسول در پشت فرم ویندوزی استفاده کرد؟برای بررسی و درک بهتر سوالم،دو کد ارسال اطلاعات از سرور به کلاینت و بالعکس را در زیر میگذارم:
منت میگذارید اگه کامل راهنماییم کنید . . .
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net.Sockets;
namespace TCPEchoClient
{
class Program
{
static void Main(string[] args)
{
TcpClient client = null;
NetworkStream netStream = null;
try
{
// create socket that is connected to server on specified port
client = new TcpClient("127.0.0.1", 8000);
netStream = client.GetStream();
byte[] byteBuffer = Encoding.ASCII.GetBytes("Hello Server!");
// send the encoded string to the server
netStream.Write(byteBuffer, 0, byteBuffer.Length);
Console.WriteLine(byteBuffer.Length + " bytes sent to server.");
int totalBytesRcvd = 0; // total bytes received so far
int byteRcvd = 0; // bytes received in last read
// receive the same string back from the server
while (totalBytesRcvd < byteBuffer.Length)
{
if ((byteRcvd = netStream.Read(byteBuffer,
totalBytesRcvd,
byteBuffer.Length - totalBytesRcvd))== 0)
{
Console.WriteLine("Connection closed.");
break;
} // end if
totalBytesRcvd += byteRcvd;
} // end while
Console.WriteLine(byteBuffer.Length +
" bytes received from server >>> " +
Encoding.ASCII.GetString(byteBuffer, 0, byteBuffer.Length));
} // end try
catch (Exception err)
{
Console.WriteLine(err.ToString());
} // end catch
finally
{
netStream.Close();
client.Close();
Console.ReadKey();
} // end finally
} // end method main
} // end class program
}
همچنین:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace TCPEchoServer
{
class Program
{
static void Main(string[] args)
{
byte[] byteBuffer = new byte[32]; // receive buffer
TcpListener listener = null;
try
{
// create a TcpListener to accept client connections
listener = new TcpListener(IPAddress.Any, 8000);
listener.Start();
}
// exit program, if server can not use port number 8000
catch (Exception err)
{
Console.WriteLine(err.ToString());
Environment.Exit(0);
}
int byteRcvd = 0; // received byte count
// run forever, accepting and servicing connections
for (; ; )
{
TcpClient client = null; // for each client connection
NetworkStream netStream = null; // for each connection stream
Console.WriteLine("Waiting for connections...");
try
{
client = listener.AcceptTcpClient(); // get client connection
netStream = client.GetStream(); // get connection stream
Console.WriteLine("Handling client...");
// receive until client closes connection, indicated by 0 return value
int totalByteRcvd = 0;
while ((byteRcvd = netStream.Read(byteBuffer, totalByteRcvd,
byteBuffer.Length - totalByteRcvd)) > 0)
{
netStream.Write(byteBuffer, 0, byteRcvd);
totalByteRcvd += byteRcvd;
} // end while
Console.WriteLine(totalByteRcvd + " bytes received from client >>> " +
Encoding.ASCII.GetString(byteBuffer) + "\r\n");
// close the stream and socket. we are done with this client!
netStream.Close();
client.Close();
} // end try
catch (Exception err)
{
Console.WriteLine(err.ToString());
netStream.Close();
} // end catch
} // end for(;;)
} // end main method
} // end class program
}
میبخشید سوالی داشتم درباره برنامه نویسی سیشارپ تحت شبکه.خیلی لطف میکنید اگه پاسخ بدید.
دارم برنامه ی برگزاری آزمون تحت شبکه مینویسم.روند این برنامه این گونه است که سوالات از دیتابیس سروربه دست من برنامه نویس میرسه و بنده باید این سوالات رو در فرمی که کاربر مشاهده میکند، نمایش بدم و کاربر اونها را جواب بده.سوالات میتونه تستی تشریحی و یا ترسیمی با پینت باشه.بعد از پاسخ کاربر جوابها توسط من برنامه نویس برای سرور ارسال میشه تا در سرور عمل قضاوت بشه یا بهتر بگم جوابها صحیح بشه و نمره محاسبه بشه و مجددا کارنامه برای کاربر ارسال بشه.
سوال اول:طبق دستور العمل ما،تاریخ برگزاری امتحان و نام امتحان و زمان امتحان و تمامی سوالات بایستی از سرور برای من ارسال شود تا من در فرم اصلی برنامه جهت نمایش استفاده کنم.از دوستی شنیدم که ارسال این اطلاعات بوسیله زبان xml بواسطه تگ بندی این زبان و ارتباط با سیشارپ قابل حصوله.ولی من xmlبلد نیستم.چه راهی رو بهم پیشنهاد میکنید؟چطور میتونم تاریخ برگزاری امتحان و نام امتحان و زمان امتحان و تمامی سوالات را ارسال کنم بطوریکه سوالات پس از پاسخ دادن کاربر،یکی یکی عوض شود؟
سوال دوم:کدی دارم که ارتباط بین سرور و کلاینت را برقرار میکند.اما این کد تحت کنسول نوشته شده.اساسا چه تفاوتی بین کد تحت کنسول و تحت فرم ویندوزی وجود داره؟آیا میشه از کد تحت کنسول در پشت فرم ویندوزی استفاده کرد؟برای بررسی و درک بهتر سوالم،دو کد ارسال اطلاعات از سرور به کلاینت و بالعکس را در زیر میگذارم:
منت میگذارید اگه کامل راهنماییم کنید . . .
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net.Sockets;
namespace TCPEchoClient
{
class Program
{
static void Main(string[] args)
{
TcpClient client = null;
NetworkStream netStream = null;
try
{
// create socket that is connected to server on specified port
client = new TcpClient("127.0.0.1", 8000);
netStream = client.GetStream();
byte[] byteBuffer = Encoding.ASCII.GetBytes("Hello Server!");
// send the encoded string to the server
netStream.Write(byteBuffer, 0, byteBuffer.Length);
Console.WriteLine(byteBuffer.Length + " bytes sent to server.");
int totalBytesRcvd = 0; // total bytes received so far
int byteRcvd = 0; // bytes received in last read
// receive the same string back from the server
while (totalBytesRcvd < byteBuffer.Length)
{
if ((byteRcvd = netStream.Read(byteBuffer,
totalBytesRcvd,
byteBuffer.Length - totalBytesRcvd))== 0)
{
Console.WriteLine("Connection closed.");
break;
} // end if
totalBytesRcvd += byteRcvd;
} // end while
Console.WriteLine(byteBuffer.Length +
" bytes received from server >>> " +
Encoding.ASCII.GetString(byteBuffer, 0, byteBuffer.Length));
} // end try
catch (Exception err)
{
Console.WriteLine(err.ToString());
} // end catch
finally
{
netStream.Close();
client.Close();
Console.ReadKey();
} // end finally
} // end method main
} // end class program
}
همچنین:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace TCPEchoServer
{
class Program
{
static void Main(string[] args)
{
byte[] byteBuffer = new byte[32]; // receive buffer
TcpListener listener = null;
try
{
// create a TcpListener to accept client connections
listener = new TcpListener(IPAddress.Any, 8000);
listener.Start();
}
// exit program, if server can not use port number 8000
catch (Exception err)
{
Console.WriteLine(err.ToString());
Environment.Exit(0);
}
int byteRcvd = 0; // received byte count
// run forever, accepting and servicing connections
for (; ; )
{
TcpClient client = null; // for each client connection
NetworkStream netStream = null; // for each connection stream
Console.WriteLine("Waiting for connections...");
try
{
client = listener.AcceptTcpClient(); // get client connection
netStream = client.GetStream(); // get connection stream
Console.WriteLine("Handling client...");
// receive until client closes connection, indicated by 0 return value
int totalByteRcvd = 0;
while ((byteRcvd = netStream.Read(byteBuffer, totalByteRcvd,
byteBuffer.Length - totalByteRcvd)) > 0)
{
netStream.Write(byteBuffer, 0, byteRcvd);
totalByteRcvd += byteRcvd;
} // end while
Console.WriteLine(totalByteRcvd + " bytes received from client >>> " +
Encoding.ASCII.GetString(byteBuffer) + "\r\n");
// close the stream and socket. we are done with this client!
netStream.Close();
client.Close();
} // end try
catch (Exception err)
{
Console.WriteLine(err.ToString());
netStream.Close();
} // end catch
} // end for(;;)
} // end main method
} // end class program
}