Как соединить 2 компа, подключенных к инету: на одном запустить один экземпляр моей программы, на другом — другой, и чтобы экземпляры общались по TCP?
1) На каком IP запустить сервер, к какому IP подключаться с клиента? А что с портами?
2) Что где настроить?
3) Вообще, конечно, хотелось бы, чтобы физически компы не были никак связаны, только через интернет. Причем подключены не обязательно к одной точке.
1) Если серверной машине не выдается динамический IP от провайдера, то все просто либо на 0.0.0.0 либо к внешнему IP серверной машины делать привязку в программе. Если серверная машина находится за NAT, то нужно пробрасывать порты, как правило NAT включен на домашнем роутере, либо у провайдера. Если NAT нет, то всё просто, на каком порту открыл сервер, на тот и подключаешься с клиента
2) Проверить, что серверный порт не блокирует фаервол/антивирус и что выбранный порт не конфликтует с заранее заданным значением (номер порта лучше выбирать > 1000).
3) TCP работает поверх IP, а протокол IP вообще нас изолирует от понятия "физически связаны", на IP уровне и выше мы оперируем асбтрактным понятием "маршрут", а не "витая пара" или "вифи коннект"
как пример сервер у вас стоит на ip 192.168.0.101 вещает и слушает на 1000 порту, клиент стоит на пк с ип 192.168.0.102 стоит клиент который слушает и принимает пакеты на 1000 порту. почитайте про клиент-серверные приложения