From the Author
Network programming fundamentals, TCP & UDP.
Enabling you to send and receive files and messages over IP. Using either of the two main Internet protocols, TCP (Transmission control Protocol) or UDP (User datagram protocol). Source code is given to implement file transfer applications, along with rudimentary Instant-Messenger style applications. Examples are given in both C# and vb.net, and provide both socket level and TcpClient / TcpListener (and UdpClient) level options for implementation.
An in-depth look at HTTP clients & servers. Taking a hands-on approach to HTTP, this chapter provides examples on how to request data from web servers programmatically, using native .NET classes such as HttpWebRequest and HttpWebResponse. The examples provide information on including POST headers, Cookies, referrers etc., into your HTTP requests to retrieve data from dynamic pages on remote webservers. The chapter also provides a wealth of information in embedding Internet Explorer in your .NET applications, which can be used to provide greatly simplified HTML extraction through direct access to Internet Explorers' DOM (document object model) using the HTMLDocument interface. Also included in the chapter is an example of a multithreaded web server, with support for Mime types, expandable to support ASP.NET pages with the "System.Web.Hosting" namespaces' CreateApplicationHost and HttpWorkerRequest classes.
How to send and receive email, via SMTP, POP3, and the MAPI. In Chapter 5, The SMTP (RFC 821) protocol and POP3 (RFC 1939) protocol are detailed, and socket level implementations are given. However, higher level descriptions are also provided, such as those using the "System.Web.Mail" namespace's MailMessage class. This class leverages Microsoft's CDOSYS architecture, to provide added performance, and functionality, such as attachments and inline images. The high-level alternative to POP3 is the MAPI, (Office automation), this automates the operation of Microsoft Outlook, exposing the full functionality of the product, including utilities such as the address book etc. Also included in the chapter is a description of the IMAP (used for email, but quite rare) and NNTP (news / usenet). Included in a later chapter is a description on how to implement DNS MX (Mail exchange) which enables you to determine the associated SMTP/POP3 server of any given email address, providing a means to automatically discover the outgoing SMTP server address, or bypass a local SMTP server
Transferring and receiving files via FTP This chapter provides a detailed open-source implementation of a fully featured FTP client (RFC 959). This provides support for folder navigation, file upload and download, and integral support for Passive (PASV) FTP for firewall traversal. As with all examples in this book, they are provided in both C# and vb.net. A simplified example of an FTP client, using the Microsoft Internet Transfer Control (ITC) is also provided. As this control is a legacy ActiveX COM object, the example demonstrates how to use COM interop late-binding (i.e. Activator.CreateInstance) to include COM functionality in your .NET applications.
Securing your network application, using rock-solid digital security. When you look at security and Cryptography from the eyes of someone that is trying to crack your system, you will be all the more aware of where potential failings may lie. In this section, security is viewed from a cryptoanalists perspective, with a view to exploiting weaknesses in Symmetric and asymmetric encryptive algorithms. Symmetric encryption algorithms described include DES (DESCryptoServiceProvider), RC2 (RC2CryptoServiceProvider), Triple-DES (TripleDESCryptoServiceProvider), Rijndael (RijndaelManaged). An Asymetric encryption scheme, namely RSA (RSACryptoServiceProvider) is also provided. Beyond encryption, the section also explores information Hashing, using MD5 (MD5CryptoServiceProvider) and SHA (SHA1Managed). Also, code examples on reading and installing both client and server X509 digital cetificates is also provided. Other topics in this section include Windows authentication (NTLM, Kerberos) and .NET passport authentication.
Boosting the performance of your network application with Zip compression & multicast This section is concerned with getting the most out of available bandwidth. This dicusses techniques such as caching, UDP Multicast Sockets (using the MulticastOption Class), Lossless compress (Zip), Lossy compression (image & Video) and more advanced techiques such as IO completion ports etc. Also the issue of scalability is discussed in depth, with issues such as load balancing, replication, redundancy, thread pooling, future-proofing (i.e. IPv6 compatibility).
Communicate using XML, with Remoting and Web services This chapter teaches you the basics of .NET Remoting (the successor to DCOM), including configuration and deployment for real-world applications. It discusses the many ways in which to host a Remoteable object (Windows Service, IIS, or application), as well the means to invoke such a service (Synchronous, asynchronous, and OneWay). Going beyond the basics, it discusses remoting channels & Sinks (IMessageSink interface), object lifetime (ILease interface), Versioning, Events, and so forth. The webservice example in this chaper demonstrates how to create an XML web service (ASMX file) which can retrieve the IP address of a client computer from the underlying HTTP serverVariables. It also describes both Asyncronous and synchronous invokation of a web service.
Listen in on network traffic, with packet level networking This chapter descibed how to listen for packets in promiscous mode (also known as packet capture or packet Sniffing), that is to say using either native .NET code (using socket.IOControl SIO_RCVALL), or using a packet driver (). This chapter includes information on how to interpret this data, including Ethernet frame header (or PPP frame headers), as well as the non-IP protocols, such as ARP, Netbios, etc. In addition to this, the chapter also describes the upcoming features in .NET Whidbey for Windows Longhorn, which provide information on available network interfaces and statistics, via the NetworkInformation class.
Make your computer answer your phone for you, with .NET telephony This chapter provides source code for using the TAPI in .NET. TAPI allows C# and vb.net applications listen for and respond to incomming phone calls. Namely, the type of systems used in call centers and expensive CTI (computer telephony Integration) applications. The examples provided use the TAPI32 DLL's ported from TAPI .h such as lineAnswer, lineInitialize , lineNegotiateAPIVersion, lineOpen ,lineGetDevCaps, lineSetStatusMessages ,lineDrop , and lineShutdown. Also included in the chapter is how to directly invoke modem functions via the comm port using the MSCOMM ActiveX (COM) object to make outgoing calls. The examples in this chapter can be expanded upon to make and recieve VOIP (H323) calls, and leverage SAPI to record and playback speech over the telephone via TAPI.