I need to establish a tcp connection from my house computer to my office computer.
on the office there is a router where several computers are connected to. that rou
TCP hole punching frequently doesn't work. You're best bet is to stick to UDP hole punching. If you need TCP-like behavior, you can use RDP or a similar protocol that gives you TCP behavior but can use UDP as its transport.
The other approach is to relay all traffic through the server. Each host can connect to the server and the server can copy traffic from one connection to the other.
The best solution would be if you can get some support from the routers such as port forwarding or UPnP.