Back to feature list...
Proxies and custom sockets
On this page:
SOCKS4/SOCKS5 proxy servers
To connect through SOCKET4, SOCKET4a or SOCKS5 proxy servers, assign the WebSocketClient.Proxy property
before calling other methods. Use ProxyType property to specify the proxy type:
// create an instance of WebSocketClient // ... // use SOCKS5 proxy client.Proxy.ProxyType = ProxyType.Socks5; client.Proxy.Host = proxyHost; client.Proxy.Port = proxyPort; client.Proxy.UserName = proxyUserName;
' create an instance of WebSocketClient ' ... ' use SOCKS5 proxy client.Proxy.ProxyType = ProxyType.Socks5 client.Proxy.Host = proxyHost client.Proxy.Port = proxyPort client.Proxy.UserName = proxyUserName
HTTP CONNECT proxy servers
To connect through a HTTP proxy server, assign the WebSocketClient.Proxy property
before calling other methods. Make sure the proxy server supports HTTP CONNECT method,
and set the ProxyType property to HttpConnect:
// create an instance of WebSocketClient // ... // use HTTP CONNECT proxy client.Proxy.ProxyType = ProxyType.HttpConnect; client.Proxy.Host = proxyHost; client.Proxy.Port = proxyPort; client.Proxy.UserName = proxyUserName; client.Proxy.Password = proxyPassword;
' create an instance of WebSocketClient ' ... ' use HTTP CONNECT proxy client.Proxy.ProxyType = ProxyType.HttpConnect client.Proxy.Host = proxyHost client.Proxy.Port = proxyPort client.Proxy.UserName = proxyUserName client.Proxy.Password = proxyPassword
Proxies with single sign-on
Some HTTP CONNECT proxies support NTLM authentication with single sign-on. To take advantage of this
feature, set the AuthenticationMethod property to ProxyAuthentication.Ntlm.
// create an instance of WebSocketClient // ... // use HTTP CONNECT proxy client.Proxy.ProxyType = ProxyType.HttpConnect; client.Proxy.Host = proxyHost; client.Proxy.Port = proxyPort; // use single sign-on client.Proxy.AuthenticationMethod = ProxyAuthentication.Ntlm;
' create an instance of WebSocketClient ' ... ' use HTTP CONNECT proxy client.Proxy.ProxyType = ProxyType.HttpConnect client.Proxy.Host = proxyHost client.Proxy.Port = proxyPort ' use single sign-on client.Proxy.AuthenticationMethod = ProxyAuthentication.Ntlm
SSH server as proxy
It's possible to tunnel HTTP sessions through an SSH server, essentially using it as a proxy server. See Tunneling for more information and sample code.
Custom transport layer - ISocket
Rebex libraries make it possible to implement a custom transport layer,
giving you full control over the network communication.
All you need to do is implement a custom ISocketFactory and
ISocket interfaces and instruct the WebSocketClient object to use them.
// create an instance of WebSocketClient // ... // initialize factory SimpleSocketFactory factory = new SimpleSocketFactory(); factory.SocketConnecting += factory_SocketConnecting; // use the factory client.SetSocketFactory(factory);
' create an instance of WebSocketClient ' ... ' initialize factory Dim factory As New SimpleSocketFactory() AddHandler factory.SocketConnecting, AddressOf factory_SocketConnecting ' use the factory client.SetSocketFactory(factory)
Custom transport layer (ISocket/ISocketFactory) implementation
/// <summary>
/// Exposes SocketConnected event which is raised
/// when a socket successfully connects to a remote end.
/// </summary>
public class SimpleSocketFactory : ISocketFactory
{
/// <summary>
/// Occurs when a socket successfully connects to a remote end.
/// </summary>
public event EventHandler SocketConnecting;
// creates custom ISocket implementation
ISocket ISocketFactory.CreateSocket()
{
return new SimpleSocket(this);
}
// raises event
private void OnSocketConnecting()
{
EventHandler h = SocketConnecting;
if (h != null)
h(this, EventArgs.Empty);
}
// simple ISocket implementation
// (core functionality is taken from ProxySocket)
private class SimpleSocket : ProxySocket, ISocket
{
// creator object
private readonly SimpleSocketFactory _factory;
public SimpleSocket(SimpleSocketFactory factory)
{
_factory = factory;
}
// connects to a server and raises SocketConnected event
void ISocket.Connect(string serverName, int serverPort)
{
_factory.OnSocketConnecting();
base.Connect(serverName, serverPort);
}
// connects to a server and raises SocketConnected event
void ISocket.Connect(EndPoint endpoint)
{
_factory.OnSocketConnecting();
base.Connect(endpoint);
}
}
}
''' <summary>
''' Exposes SocketConnected event which is raised
''' when a socket successfully connects to a remote end.
''' </summary>
Public Class SimpleSocketFactory
Implements ISocketFactory
''' <summary>
''' Occurs when a socket successfully connects to a remote end.
''' </summary>
Public Event SocketConnecting As EventHandler
' creates custom ISocket implementation
Private Function ISocketFactory_CreateSocket() As ISocket Implements ISocketFactory.CreateSocket
Return New SimpleSocket(Me)
End Function
' raises event
Private Sub OnSocketConnecting()
RaiseEvent SocketConnecting(Me, EventArgs.Empty)
End Sub
' simple ISocket implementation
' (core functionality is taken from ProxySocket)
Private Class SimpleSocket
Inherits ProxySocket
Implements ISocket
' creator object
Private ReadOnly _factory As SimpleSocketFactory
Public Sub New(factory As SimpleSocketFactory)
_factory = factory
End Sub
' connects to a server and raises SocketConnected event
Private Sub ISocket_Connect(serverName As String, serverPort As Integer) Implements ISocket.Connect
_factory.OnSocketConnecting()
MyBase.Connect(serverName, serverPort)
End Sub
' connects to a server and raises SocketConnected event
Private Sub ISocket_Connect(endpoint As EndPoint) Implements ISocket.Connect
_factory.OnSocketConnecting()
MyBase.Connect(endpoint)
End Sub
End Class
End Class
Please note that custom communication layer and proxy support are mutually exclusive - it's not possible to use both at the same time.
Back to feature list...