All pastes #735402 Raw Edit

Server (Diilbert)

public text v1 · immutable
·published 2007-10-13 16:13 UTC
rendered paste body
protected void InitializeServer(int nPort)
		{
			tcpLsn = new TcpListener(nPort);
			tcpLsn.Start();
			tcpThd = new Thread(new ThreadStart(WaitingForClient));
			tcpThd.Start();
		}
		
		public void WaitingForClient()
		{
			ClientData CData;
			while(true)
			{	/* Accept will block until someone connects */
				CData.structSocket = tcpLsn.AcceptSocket();
				Interlocked.Increment(ref connectId); 	
				CData.structThread = new Thread(new ThreadStart(ReadSocket));
					
				lock(this)
				{	// it is used to keep connected Sockets and active thread
					dataHolder.Add(connectId, CData);
				}
				CData.structThread.Start();
			}
		}
		
		public void ReadSocket()
		{
			/* realId will be not changed for each thread, but connectId is 
			 * changed. it can't be used to delete object from Hashtable*/
			long realId = connectId;
			Byte[] receive;
			ClientData cd = (ClientData)dataHolder[realId];
			Socket s = cd.structSocket;
			int ret = 0;
			string sData = null;
			string[] sReceived;
			bool bExit = false;	// Exit on Success
			
			while (!bExit) 
			{
				if(s.Connected)
				{	
					receive = new Byte[100] ;
					
					try
					{
						ret = s.Receive(receive,receive.Length,0);
						
						// Do stuff with received data AND send back a response
						
						int sentBytes = s.Send(Encoding.UTF8.GetBytes(sData),Encoding.UTF8.GetBytes(sData).Length,SocketFlags.None);
						
					}
					catch (Exception e) 
					{
						
						if( !s.Connected )
						{
							break;
						}
						else
							cwp.mobile.utils.DisplayError(e);
							
					}
					bExit = true;
				}
			}
			CloseTheThread(realId);
		}
	
		private void CloseTheThread(long realId)
		{
			try
			{	
				ClientData clientData = (ClientData)dataHolder[realId];
				clientData.structThread.Abort();
			}

			catch(Exception )
			{	lock(this)
				{	
					dataHolder.Remove(realId);
				}
			}
		}