سلامی مجدد
حل شد قضیه
اینم کد ، امیدوارم که به درد دوستان بخوره
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace Server_Socket
{
public delegate void Write_Log(string message);
public partial class Server_Main : Form
{
private const int BUFSIZE = 1024;
private const int BACKLOG = 5;
private int serverPort;
Socket server = null;
byte[] buffer = new byte[BUFSIZE];
Thread Listen;
Thread node;
Write_Log wl;
public Server_Main()
{
InitializeComponent();
wl = new Write_Log(this.Write_Message);
}
private void Write_Message(string message)
{
if (lb_Log.InvokeRequired == true)
{
Write_Log sd = new Write_Log(Write_Message);
this.Invoke(sd, new Object[] { message });
}
else
{
lb_Log.Items.Add(message);
}
}
private void btn_Exit_Click(object sender, EventArgs e)
{
wl("trying to Close the Connection...");
try
{
if (server != null && server.Connected)
{
server.Close();
}
Thread.CurrentThread.Abort();
}
catch (Exception ex)
{
wl("Eror in Exit() method. " + ex.Message);
Application.Exit();
}
}
private void btn_listen_Click(object sender, EventArgs e)
{
serverPort = int.Parse(txt_Port.Text);
try
{
server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
server.Bind(new IPEndPoint(IPAddress.Loopback, serverPort));
server.Listen(BACKLOG);
Listen = new Thread(new ThreadStart(Listening));
Listen.Start();
btn_listen.Enabled = false;
}
catch (SocketException se)
{
wl(se.ErrorCode + ": " + se.Message);
Environment.Exit(se.ErrorCode);
Thread.CurrentThread.Abort();
}
}
void Listening()
{
while (true)
{
try
{
wl("Waiting for Clients....");
Socket s = server.Accept();
ClientServer cl = new ClientServer(s, wl);
wl("A Client Connected with IP=" + s.RemoteEndPoint.ToString());
node = new Thread(new ThreadStart(cl.StartServing));
node.Start();
}
catch (Exception ex)
{
wl("Eror in Serving() Listening. " + ex.Message);
if (node != null && node.ThreadState == ThreadState.Running)
{
Thread.CurrentThread.Abort();
}
if (server.Connected)
{
server.Shutdown(SocketShutdown.Both);
server.Close();
Application.Exit();
}
}
}
}
private void Server_Main_FormClosing(object sender, FormClosingEventArgs e)
{
System.Environment.Exit(0);
}
}
class ClientServer
{
Socket client;
byte[] data = new byte[1024];
string answer;
Write_Log wl;
public ClientServer(Socket s, Write_Log w)
{
client = s;
wl = w;
}
public void StartServing()
{
try
{
data = Encoding.ASCII.GetBytes("Connect to Server");
client.Send(data);
while (true)
{
int num = client.Receive(data);
string s = Encoding.ASCII.GetString(data, 0, num);
answer = " A request from " + client.RemoteEndPoint.ToString() + "# the Request is: " + s;
wl(answer);
data = Encoding.ASCII.GetBytes("Receive");
client.Send(data, 0, data.Length, SocketFlags.None);
}
}
catch (Exception ex)
{
if (ex.Message == "An existing connection was forcibly closed by the remote host")
{
wl(client.RemoteEndPoint.ToString() + " Closed.");
}
client.Close(); Thread.CurrentThread.Abort();
Application.Exit();
}
}
}
}