private void ForwardTcpData(Socket client, Socket server)
{
ArrayList ReadList = new ArrayList(2);
client.Send(Encoding.ASCII.GetBytes("HTTP/1.1 200 Connection established\r\n\r\n"));
while (true)
{
ReadList.Clear();
ReadList.Add(client);
ReadList.Add(server);
try
{
//Console.WriteLine("test socket");
Socket.Select(ReadList, null, null, 1 * 1000 * 1000);
}
catch (SocketException e)
{
Console.WriteLine("Select error: " + e.Message);
break;
}
// time out
if (ReadList.Count == 0)
{
//Console.WriteLine("Time out");
if (client.Connected && server.Connected)
continue;
else
break;
}
// client send message
if (ReadList.Contains(client))
{
byte[] Recv = new byte[1024];
int Length = 0;
try
{
Length = client.Receive(Recv, Recv.Length,0);
if (Length == 0)
{
Console.WriteLine("Client is disconnect.");
break;
}
Console.WriteLine(" Recv bytes from client" + Encoding.ASCII.GetString(Recv), Length);
}
catch (Exception e)
{
Console.WriteLine("Read from client error: " + e.Message);
break;
}
try
{
Length = server.Send(Recv, Length,0);
Console.WriteLine(" Write bytes to server{0}", Length);
}
catch (Exception e)
{
Console.WriteLine("Write data to server error: " + e.Message);
break;
}
}
// real server send messgae
if (ReadList.Contains(server))
{
byte[] Recv = new byte[1024];
int Length = 0;
try
{
Length = server.Receive(Recv, Recv.Length, 0);
if (Length == 0)
{
Console.WriteLine("Server is disconnect");
break;
}
Console.WriteLine("Recv bytes from server", Length);
}
catch (Exception e)
{
Console.WriteLine("Read from server error: " + e.Message);
break;
}
try
{
Length = client.Send(Recv, Length, 0);
Console.WriteLine(" Write bytes to client", Length);
}
catch (Exception e)
{
Console.WriteLine("Write data to client error: " + e.Message);
break;
}
}
}
try
{
client.Shutdown(SocketShutdown.Both);
server.Shutdown(SocketShutdown.Both);
client.Close();
server.Close();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
Console.WriteLine("connect close");
}
}
//Resource discovery Handle