Programmer 1
پنج شنبه 26 خرداد 1390, 01:52 صبح
سلام دوستان ،
مشکل این کد چیه ، اجرا میشه ولی اون چیزی نیست که من میخوام
public partial class Server : Form
{
public Server()
{
InitializeComponent();
}
static byte[] data = new byte[2048];
static Socket newSocket;
private void txtSend_Click(object sender, EventArgs e)
{
newSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
newSocket.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8000));
ThreadStart ts = new ThreadStart(Listen);
Thread t = new Thread(ts);
t.Start();
txtSendAndRecievedMessage.Text = "Client: " + Encoding.ASCII.GetString(data);
}
static private void Listen()
{
newSocket.Listen(10);
Socket acceptedSocket = newSocket.Accept();
acceptedSocket.Receive(data);
}
}
من چون از سوکت های سنکرون برای ارتباط استفاده کردم برنامه سمت سرور تا زمانی که یک سوکت رو نپذیرفته هنگ میکنه و نمیشه هیچ کاری باهاش کرد ، میدونم که باید از سوکت های آسنکرون در سیستمهای مالتی تسک مثل ویندوز استفاده کرد ولی خوب من اومدم یک کاری کردم برای رفع این مشکل:
اومدم اون بخشی که باعث هنگ برنامه میشه (جایی که سوکت در حال گوش دادن هست) رو داخل یک متد گذاشتم و در یک ترید (thread) اجراش کردم ولی وقتی Trace گرفتم اصلا متد listen که باید توسط
ترید اجرا بشه ، اجرا نمیشه! و مستقیما میره خط بعدی دستورات .
بعد یک سوال ، دیگه اساسا سوکتهای سنکرون تو کجا کاربرد دارن؟!
لطفا راهنمایی کنید.
مشکل این کد چیه ، اجرا میشه ولی اون چیزی نیست که من میخوام
public partial class Server : Form
{
public Server()
{
InitializeComponent();
}
static byte[] data = new byte[2048];
static Socket newSocket;
private void txtSend_Click(object sender, EventArgs e)
{
newSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
newSocket.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8000));
ThreadStart ts = new ThreadStart(Listen);
Thread t = new Thread(ts);
t.Start();
txtSendAndRecievedMessage.Text = "Client: " + Encoding.ASCII.GetString(data);
}
static private void Listen()
{
newSocket.Listen(10);
Socket acceptedSocket = newSocket.Accept();
acceptedSocket.Receive(data);
}
}
من چون از سوکت های سنکرون برای ارتباط استفاده کردم برنامه سمت سرور تا زمانی که یک سوکت رو نپذیرفته هنگ میکنه و نمیشه هیچ کاری باهاش کرد ، میدونم که باید از سوکت های آسنکرون در سیستمهای مالتی تسک مثل ویندوز استفاده کرد ولی خوب من اومدم یک کاری کردم برای رفع این مشکل:
اومدم اون بخشی که باعث هنگ برنامه میشه (جایی که سوکت در حال گوش دادن هست) رو داخل یک متد گذاشتم و در یک ترید (thread) اجراش کردم ولی وقتی Trace گرفتم اصلا متد listen که باید توسط
ترید اجرا بشه ، اجرا نمیشه! و مستقیما میره خط بعدی دستورات .
بعد یک سوال ، دیگه اساسا سوکتهای سنکرون تو کجا کاربرد دارن؟!
لطفا راهنمایی کنید.