Initial version
Only TCP communication works.
Needs better testing.