RSS Feed
Download our iPhone app
Browse DevX
Sign up for e-mail newsletters from DevX


Extend Your Instant Messenger Application with FTP Support and Private Chat

In part 1 of this article, you learned to create a mult-user chat application using network programming in .NET. In this article, you'll build on that application to add sophisticated features such as file downloads.

n part 1of this article, you saw how to build your own instant messenger application that allows many users to chat simultaneously. While the application is interesting, it is not very flexible as you cannot choose the user(s) you want to chat with; all messages are broadcasted to everyone in the chat.

Building on the earlier article, I'll show you how to enhance the application to allow private chats between selected users. You will also build FTP support into the application so that you can transfer files between users.

Defining Your Own Protocol
In order to enhance the chat application, you have to define your own protocol for the various functions. For example, when you want to chat with someone, you need to indicate the user name to the server so that only messages destined for this user are sent to him. Similarly, when you need to perform a file transfer, there must be several handshaking processes to ensure that the recipient explicitly accepts the file transfer before it is sent.

This section describes the communication between the users and the server.

Logging in
User1 signs in to the server:

  • User1 sends [Join][User1] to the server indicating its presence
  • Server broadcast [Join][User1] to all the users currently connected

Requesting users' names
When User1 logs in to the server, he needs to know who is currently online:

  • User1 sends [Usrs] to the server, asking for a list of users currently online
  • Server sends back to User1 [Usrs][User1,User2,UserN,] containing a list of all user names

User1 wants to chat with User2 and User3:

  • User1 sends [Talk][User2,User3,]User1>Hello! to server
  • Server sends [Talk][User2,User3,]User1>Hello! to both User2 and User3

File transfer
User1 (IP address wants to send a file named File1.txt to User2 (IP address

  • User1 sends [File][User1,User2,][File1.txt] to server
  • Server sends [File][User1][File1.txt] to User2 to confirm if he wants to receive the file
  • If User2 responds with Yes, server sends [Send_File][User1, User2] to server indicating that it wishes to receive the file
  • User2 starts to listen at port number 501 for incoming data
  • Server looks up the IP address of User2 and sends [Send_File][] to User1
  • User1 starts the FTP service by using the IP address (, port number 501.
Author's Note: Note that for file transfer, the actual transferring of files takes place between the clients; the server is not involved.

Leaving a chat
User1 signs out of the chat:

  • User1 sends [Left][User1] to the server
  • Server will broadcast [Left][User1] to all users

Close Icon
Thanks for your registration, follow us on our social networks to keep up-to-date