Sharpist
سه شنبه 28 اردیبهشت 1389, 20:08 عصر
من در حال یادگیری سی شارپ هستم.
دوست ندارم از روی کتاب کار کنم و میخوام به نیاز هایم برسم و برنامه های واقعی بنویسم.
من نیاز به یک برنامه ی سرور TCP دارم که روی یک پورت listen کنه. و به client ها به صورت همزمان و multithread جواب بده.
چندین سورس مختلف رو تست کردم، اما هیچ کدوم به صورت multi thread نبود.
یک نمونه در ادامه مثال میزنم که اگه به صورت multi thread در بیارید عالی میشه:
namespace CSServer
{
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
class CSServer
{
private TcpListener myListener;
private string ip = "127.0.0.1";
private int port = 81;
// Application Starts Here..
public static void Main()
{
CSServer MWS = new CSServer();
}
//The constructor which make the TcpListener start listening on the
//given port. It also calls a Thread on the method StartListen().
public CSServer()
{
try
{
//start listing on the given port
myListener = new TcpListener(IPAddress.Parse(ip), port);
myListener.Start();
Console.WriteLine("Web Server Running... Press ^C to Stop...");
//start the thread which calls the method 'StartListen'
Thread th = new Thread(new ThreadStart(StartListen));
th.Start();
}
catch (Exception e)
{
Console.WriteLine("An Exception Occurred while Listening :" + e.ToString());
}
}
/// <summary>
/// Overloaded Function, takes string, convert to bytes and calls
/// overloaded sendToBrowserFunction.
/// </summary>
/// <param name="sData">The data to be sent to the browser(client)</param>
/// <param name="mySocket">Socket reference</param>
public void SendToBrowser(String sData, ref Socket mySocket)
{
SendToBrowser(Encoding.ASCII.GetBytes(sData), ref mySocket);
}
/// <summary>
/// Sends data to the browser (client)
/// </summary>
/// <param name="bSendData">Byte Array</param>
/// <param name="mySocket">Socket reference</param>
public void SendToBrowser(Byte[] bSendData, ref Socket mySocket)
{
int numBytes = 0;
try
{
if (mySocket.Connected)
{
if ((numBytes = mySocket.Send(bSendData, bSendData.Length, 0)) == -1)
Console.WriteLine("Socket Error cannot Send Packet");
else
{
Console.WriteLine("No. of bytes send {0}", numBytes);
}
}
else
Console.WriteLine("Connection Dropped....");
}
catch (Exception e)
{
Console.WriteLine("Error Occurred : {0} ", e);
}
}
//This method Accepts new connection and
//First it receives the welcome massage from the client,
//Then it sends the Current date time to the Client.
public void StartListen()
{
while (true)
{
//Accept a new connection
Socket mySocket = myListener.AcceptSocket();
Console.WriteLine("Socket Type " + mySocket.SocketType);
if (mySocket.Connected)
{
Console.WriteLine("\nClient Connected!!\n==================\nCLient IP {0}\n",
mySocket.RemoteEndPoint);
//make a byte array and receive data from the client
Byte[] bReceive = new Byte[1024];
int i = mySocket.Receive(bReceive, bReceive.Length, 0);
//Convert Byte to String
string sBuffer = Encoding.ASCII.GetString(bReceive);
SendToBrowser("This is", ref mySocket);
Thread.Sleep(5000);
SendToBrowser(" a test!", ref mySocket);
mySocket.Close();
}
}
}
}
}
دوست ندارم از روی کتاب کار کنم و میخوام به نیاز هایم برسم و برنامه های واقعی بنویسم.
من نیاز به یک برنامه ی سرور TCP دارم که روی یک پورت listen کنه. و به client ها به صورت همزمان و multithread جواب بده.
چندین سورس مختلف رو تست کردم، اما هیچ کدوم به صورت multi thread نبود.
یک نمونه در ادامه مثال میزنم که اگه به صورت multi thread در بیارید عالی میشه:
namespace CSServer
{
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
class CSServer
{
private TcpListener myListener;
private string ip = "127.0.0.1";
private int port = 81;
// Application Starts Here..
public static void Main()
{
CSServer MWS = new CSServer();
}
//The constructor which make the TcpListener start listening on the
//given port. It also calls a Thread on the method StartListen().
public CSServer()
{
try
{
//start listing on the given port
myListener = new TcpListener(IPAddress.Parse(ip), port);
myListener.Start();
Console.WriteLine("Web Server Running... Press ^C to Stop...");
//start the thread which calls the method 'StartListen'
Thread th = new Thread(new ThreadStart(StartListen));
th.Start();
}
catch (Exception e)
{
Console.WriteLine("An Exception Occurred while Listening :" + e.ToString());
}
}
/// <summary>
/// Overloaded Function, takes string, convert to bytes and calls
/// overloaded sendToBrowserFunction.
/// </summary>
/// <param name="sData">The data to be sent to the browser(client)</param>
/// <param name="mySocket">Socket reference</param>
public void SendToBrowser(String sData, ref Socket mySocket)
{
SendToBrowser(Encoding.ASCII.GetBytes(sData), ref mySocket);
}
/// <summary>
/// Sends data to the browser (client)
/// </summary>
/// <param name="bSendData">Byte Array</param>
/// <param name="mySocket">Socket reference</param>
public void SendToBrowser(Byte[] bSendData, ref Socket mySocket)
{
int numBytes = 0;
try
{
if (mySocket.Connected)
{
if ((numBytes = mySocket.Send(bSendData, bSendData.Length, 0)) == -1)
Console.WriteLine("Socket Error cannot Send Packet");
else
{
Console.WriteLine("No. of bytes send {0}", numBytes);
}
}
else
Console.WriteLine("Connection Dropped....");
}
catch (Exception e)
{
Console.WriteLine("Error Occurred : {0} ", e);
}
}
//This method Accepts new connection and
//First it receives the welcome massage from the client,
//Then it sends the Current date time to the Client.
public void StartListen()
{
while (true)
{
//Accept a new connection
Socket mySocket = myListener.AcceptSocket();
Console.WriteLine("Socket Type " + mySocket.SocketType);
if (mySocket.Connected)
{
Console.WriteLine("\nClient Connected!!\n==================\nCLient IP {0}\n",
mySocket.RemoteEndPoint);
//make a byte array and receive data from the client
Byte[] bReceive = new Byte[1024];
int i = mySocket.Receive(bReceive, bReceive.Length, 0);
//Convert Byte to String
string sBuffer = Encoding.ASCII.GetString(bReceive);
SendToBrowser("This is", ref mySocket);
Thread.Sleep(5000);
SendToBrowser(" a test!", ref mySocket);
mySocket.Close();
}
}
}
}
}