How to block a client in C sharp socket programming (very very URGENT)

EDN Admin

Well-known member
Joined
Aug 7, 2010
Messages
12,794
Location
In the Machine
I have one server and client application using socket programming in c#. In this, max. 10 clients can be connected to the server at a time. But my requirement is that I have to block one of the clients via IP address when I am sending messages through server.. Please help with blocking. The program is given below. Please help me. I am a fresher in C#<br/> <br/> using System; <br/> using System.Collections.Generic; <br/> using System.ComponentModel;<br/> using System.Data; <br/> using System.Drawing;<br/> using System.Text;<br/> using System.Windows.Forms; <br/> using System.Net.Sockets; <br/> using System.Net;<br/> <br/> namespace Server <br/> { <br/> public partial class SocketServer : Form <br/> { <br/> const int MAX_CLIENTS = 10;<br/> public AsyncCallback pfnWorkerCallBack;<br/> private Socket m_mainSocket;<br/> private Socket[] m_workerSocket = new Socket[10];<br/> private int m_clientCount = 0;<br/> private byte[] byData;<br/> <br/> <br/> public SocketServer()<br/> {<br/> InitializeComponent();<br/> textBoxIP.Text = GetIP();<br/> }<br/> <br/> String GetIP()<br/> {<br/> String strHostName = Dns.GetHostName();<br/> // Find host by name<br/> IPHostEntry iphostentry = Dns.GetHostByName(strHostName);<br/> <br/> // Grab the first IP addresses<br/> String IPStr = "";<br/> foreach (IPAddress ipaddress in iphostentry.AddressList)<br/> {<br/> IPStr = ipaddress.ToString();<br/> ip = IPStr;<br/> return IPStr;<br/> }<br/> ip = IPStr;<br/> return IPStr;<br/> <br/> }<br/> <br/> <br/> <br/> private void Form1_Load(object sender, EventArgs e)<br/> {<br/> <br/> }<br/> <br/> private void buttonStartListen_Click(object sender, EventArgs e)<br/> {<br/> try<br/> {<br/> // Check the port value<br/> if (textBoxPort.Text == "")<br/> {<br/> MessageBox.Show("Please enter a Port Number");<br/> return;<br/> }<br/> string portStr = textBoxPort.Text;<br/> int port = System.Convert.ToInt32(portStr);<br/> // Create the listening socket...<br/> m_mainSocket = new Socket(AddressFamily.InterNetwork,<br/> SocketType.Stream,<br/> ProtocolType.Tcp);<br/> IPEndPoint ipLocal = new IPEndPoint(IPAddress.Any, port);<br/> <br/> <br/> // Bind to local IP Address...<br/> m_mainSocket.Bind(ipLocal);<br/> // Start listening...<br/> m_mainSocket.Listen(4);<br/> // Create the call back for any client connections...<br/> m_mainSocket.BeginAccept(new AsyncCallback(OnClientConnect), null);<br/> <br/> UpdateControls(true);<br/> <br/> }<br/> catch (SocketException se)<br/> {<br/> MessageBox.Show(se.Message);<br/> }<br/> }<br/> <br/> private void UpdateControls(bool listening)<br/> {<br/> buttonStartListen.Enabled = !listening;<br/> buttonStopListen.Enabled = listening;<br/> }<br/> <br/> public delegate void UpdateTextCallback(string message, object obj);<br/> <br/> public void OnClientConnect(IAsyncResult asyn)<br/> {<br/> try<br/> {<br/> // Here we complete/end the BeginAccept() asynchronous call<br/> // by calling EndAccept() - which returns the reference to<br/> // a new Socket object<br/> m_workerSocket[m_clientCount] = m_mainSocket.EndAccept(asyn);<br/> // Let the worker Socket do the further processing for the <br/> // just connected client<br/> WaitForData(m_workerSocket[m_clientCount]);<br/> // Now increment the client count<br/> ++m_clientCount;<br/> // Display this client connection as a status message on the GUI <br/> String str = String.Format("Client # {0} connected", m_clientCount);<br/> <br/> //textBoxMsg.Text = str;<br/> textBoxMsg.BeginInvoke(new UpdateTextCallback(UpdateText), new object[] { str, textBoxMsg });<br/> <br/> // Since the main Socket is now free, it can go back and wait for<br/> // other clients who are attempting to connect<br/> m_mainSocket.BeginAccept(new AsyncCallback(OnClientConnect), null);<br/> <br/> <br/> }<br/> catch (ObjectDisposedException)<br/> {<br/> System.Diagnostics.Debugger.Log(0, "1", "n OnClientConnection: Socket has been closedn");<br/> }<br/> catch (SocketException se)<br/> {<br/> MessageBox.Show(se.Message);<br/> }<br/> <br/> }<br/> <br/> private void UpdateText(string message, object ctrl)<br/> {<br/> if (ctrl is TextBox)<br/> textBoxMsg.Text = message;<br/> <br/> if(ctrl is RichTextBox)<br/> richTextBoxReceivedMsg.AppendText(message);<br/> }<br/> <br/> public class SocketPacket<br/> {<br/> public System.Net.Sockets.Socket m_currentSocket;<br/> public byte[] dataBuffer = new byte[1];<br/> }<br/> <br/> public void WaitForData(System.Net.Sockets.Socket soc)<br/> {<br/> try<br/> {<br/> if (pfnWorkerCallBack == null)<br/> {<br/> // Specify the call back function which is to be <br/> // invoked when there is any write activity by the <br/> // connected client<br/> pfnWorkerCallBack = new AsyncCallback(OnDataReceived);<br/> }<br/> SocketPacket theSocPkt = new SocketPacket();<br/> theSocPkt.m_currentSocket = soc;<br/> // Start receiving any data written by the connected client<br/> // asynchronously<br/> soc.BeginReceive(theSocPkt.dataBuffer, 0,<br/> theSocPkt.dataBuffer.Length,<br/> SocketFlags.None,<br/> pfnWorkerCallBack,<br/> theSocPkt);<br/> }<br/> catch (SocketException se)<br/> {<br/> MessageBox.Show(se.Message);<br/> }<br/> <br/> }<br/> <br/> public void OnDataReceived(IAsyncResult asyn)<br/> {<br/> try<br/> {<br/> SocketPacket socketData = (SocketPacket)asyn.AsyncState;<br/> <br/> int iRx = 0;<br/> // Complete the BeginReceive() asynchronous call by EndReceive() method<br/> // which will return the number of characters written to the stream <br/> // by the client<br/> iRx = socketData.m_currentSocket.EndReceive(asyn);<br/> char[] chars = new char[iRx + 1];<br/> System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder();<br/> int charLen = d.GetChars(socketData.dataBuffer,<br/> 0, iRx, chars, 0);<br/> System.String szData = new System.String(chars);<br/> //richTextBoxReceivedMsg.AppendText(szData);<br/> richTextBoxReceivedMsg.BeginInvoke(new UpdateTextCallback(UpdateText), new object[] { szData, richTextBoxReceivedMsg });<br/> <br/> // Continue the waiting for data on the Socket<br/> WaitForData(socketData.m_currentSocket);<br/> }<br/> catch (ObjectDisposedException)<br/> {<br/> System.Diagnostics.Debugger.Log(0, "1", "nOnDataReceived: Socket has been closedn");<br/> }<br/> catch (SocketException se)<br/> {<br/> MessageBox.Show(se.Message);<br/> }<br/> }<br/> private void buttonStopListen_Click(object sender, EventArgs e)<br/> {<br/> CloseSockets();<br/> UpdateControls(false);<br/> }<br/> <br/> void CloseSockets()<br/> {<br/> if (m_mainSocket != null)<br/> {<br/> m_mainSocket.Close();<br/> }<br/> for (int i = 0; i < m_clientCount; i++)<br/> {<br/> if (m_workerSocket != null)<br/> {<br/> m_workerSocket.Close();<br/> m_workerSocket = null;<br/> }<br/> }<br/> }<br/> <br/> private void buttonSendMsg_Click(object sender, EventArgs e)<br/> {<br/> <br/> try<br/> {<br/> Object objData = richTextBoxSendMsg.Text;<br/> byData = System.Text.Encoding.ASCII.GetBytes(objData.ToString());<br/> for (int i = 0; i < m_clientCount; i++)<br/> {<br/> if (m_workerSocket != null)<br/> {<br/> if (m_workerSocket.Connected)<br/> {<br/> <br/> m_workerSocket.Send(byData);<br/> <br/> }<br/> }<br/> }<br/> }<br/> <br/> catch (SocketException se)<br/> {<br/> MessageBox.Show(se.Message);<br/> }<br/> }<br/> <br/> private void Form1_Minimize(object sender, System.EventArgs e)<br/> {<br/> if (FormWindowState.Minimized == WindowState)<br/> {<br/> Hide();<br/> this.notify.Visible = true;<br/> }<br/> }<br/> private void Form1_Resize(object sender, System.EventArgs e)<br/> {<br/> Show();<br/> WindowState = FormWindowState.Normal;<br/> this.notify.Visible = false;<br/> <br/> }

View the full article
 
Back
Top