2016-06-27 9 views
-1

Я разрабатываю новое программное обеспечение, и мне нужно обмениваться этими приложениями между собой, как TeamViewer и Skype. Для этой задачи я прочитал слишком много статей и написал код, но я не могу этого сделать. Я должен использовать TCP, он не может быть UDP. Безопасность данных очень важна для моего приложения.Сетевое программирование - Приложения Связь

http://www.codeproject.com/Articles/807861/Open-NAT-A-NAT-Traversal-library-for-NET-and-Mono

Я нашел N (etwork) (адрес) Т (ranslation) может решить мою проблему и я использую его. Я пишу тот же код, что они говорят, но до сих пор не работает ...

СЛУШАТЕЛЬ КЛИЕНТ КОДЫ

NatDiscoverer discoverer = new NatDiscoverer(); 
CancellationTokenSource cts = new CancellationTokenSource(5000); 
NatDevice device = await discoverer.DiscoverDeviceAsync(PortMapper.Upnp, cts); 

// display the NAT's IP address 
Console.WriteLine("The external IP Address is: {0} ", await device.GetExternalIPAsync()); 

// create a new mapping in the router [external_ip:1702 -> host_machine:1602] 
await device.CreatePortMapAsync(new Mapping(Protocol.Tcp, 1602, 1702, "For testing")); 

IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 1602); 
socket = new Socket(endPoint.AddressFamily, SocketType.Stream,ProtocolType.Tcp); 
socket.SetIPProtectionLevel(IPProtectionLevel.Unrestricted); 
socket.Bind(endPoint); 
socket.Listen(4); 

ЗАПРОС ОТПРАВИТЕЛЯ КЛИЕНТ КОДЫ

Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("100.96.106.192"), 1602); 
       sock.Connect(ipep); 

Они являются 2 клиент, и я хочу их обойти. «100.96.106.192» компьютерно Public IP (не маршрутизатор (внешний) IP) ..

Для этой задачи, я могу использовать другие языки или другие библиотеки тоже кроме WCF, потому что мое приложение нужно работать платформу самостоятельно.

Например, я начинаю прослушивать клиент и в 'cmd', я пишу 'netstat -a', и я видел, он слушает 0.0.0.0:1602. Но почему?

Пожалуйста, помогите мне и проведите меня. Что случилось с моим кодом? Что я делаю не так? Как я могу решить эту проблему?

Спасибо за все ответы и помощь. Хороший день, хорошие работы ...

ответ

0

Он прослушивает 0.0.0.0, потому что вы прошли IpAddress.Any слушателю, который прослушивает «все интерфейсы IPv4». Предполагается, что он будет отображаться как 0.0.0.0 в netstat.

В соответствии с Microsoft:

Предоставляет IP-адрес, который указывает, что сервер должен слушать клиента активности на всех сетевых интерфейсах. Это поле доступно только для чтения.

Метод Socket.Bind использует поле Любое, чтобы указать, что экземпляр Socket должен прослушивать активность клиента на всех сетевых интерфейсах. Любое поле эквивалентно 0.0.0.0 в нотации с точками.

https://msdn.microsoft.com/en-us/library/system.net.ipaddress.any%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

+0

Но то, что нужно писать там? Когда я пишу «100.96.106.192» (общедоступный IP-адрес ПК), он выдает ошибку. –