I am trying to implement a network protocol that listens on 2 separate TCP ports. One is for control messages and one is for data messages.
I understand that I need two separate protocol classes since there are two ports involved.
I would like to have one factory that creates both of these protocols since there is state information and data that is shared between them and they essential implement one protocol.
Is this possible? If yes, how? 
If not, how can I achieve something similar?
I understand that it is unusal to divide a protocol between 2 ports but that is the given situation.
Thanks
Your factory's buildProtocol can return anything you want it to return.  That's up to you.
However, you might find that things are a lot simpler if you just use two different factories.  That does not preclude sharing state.  Just have them share a bunch of attributes, or collect all your state together onto a single new object and have the factories share that object.
A single factory for multiple protocols?