Для отправки сообщения на другой компьютер с использованием статических IP-адресов в C#, можно использовать классы TcpClient и TcpListener из пространства имен System.Net.Sockets.
Для отправки сообщения (пакета) на другой компьютер, используя статический IP-адрес, необходимо выполнить следующие шаги:
1. Создайте экземпляр класса TcpClient, указав IP-адрес и порт удаленного компьютера:
```csharp
TcpClient client = new TcpClient();
IPAddress remoteIpAddress = IPAddress.Parse("статический_IP_адрес_удаленного_компьютера");
int remotePort = порт_удаленного_компьютера;
// Подключение к удаленному компьютеру
client.Connect(remoteIpAddress, remotePort);
```
2. Получите поток для записи данных на удаленный компьютер:
```csharp
NetworkStream stream = client.GetStream();
```
3. Запишите сообщение (пакет) в поток:
```csharp
string message = "Ваше сообщение";
byte[] data = Encoding.UTF8.GetBytes(message);
// Запись данных в поток
stream.Write(data, 0, data.Length);
```
4. Закройте соединение с удаленным компьютером:
```csharp
client.Close();
```
Важно отметить, что для успешной отправки сообщения на удаленный компьютер, на удаленном компьютере должен быть запущен серверный процесс, который прослушивает указанный порт и обрабатывает полученные данные.
Если оба компьютера имеют серые IP-адреса и находятся в разных локальных сетях, но подключены к интернету, для обмена сообщениями между ними можно использовать технику пересылки портов (port forwarding) на роутере, который находится в локальной сети каждого компьютера. Это позволит перенаправить входящие подключения на указанный порт на одном роутере на IP-адрес и порт другого роутера, и наоборот. Таким образом, оба компьютера смогут взаимодействовать напрямую через статические IP-адреса.