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 (네 트워크) (주소) T (ranslation이) 내 문제를 해결할 수 있습니다 내가 그것을 사용할 수 있습니다. 나는

LISTENER CLIENT CODES

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); 

요청 SENDER CLIENT CODES

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는"컴퓨터 공공 IP (라우터가 아닌 (외부) IP) 내 응용 프로그램이 독립적으로플랫폼을 작동해야하기 때문에 ..이 문제에 대한

, 나는 WCF 제외하고는 너무 다른 언어 또는 다른 라이브러리를 사용할 수 있습니다.

예를 들어 Listener Client를 시작하고 'cmd'에 'netstat -a'라고 쓰면 나는 0.0.0.0:1602를 듣습니다. 하지만 왜?

도와주세요. 내 코드가 뭐가 잘못 됐어? 내가 도대체 ​​뭘 잘못하고있는 겁니까? 이 문제를 어떻게 해결할 수 있습니까?

모든 답변과 도움에 감사드립니다. 좋은 하루 되세요, 좋은 작품 ...

답변

0

을 "모든 IPv4 인터페이스"에서 청취하는 사용자에게 전달했기 때문에 0.0.0.0에서 수신 대기 중입니다. 이것은 netstat에 0.0.0.0으로 표시되어야합니다. 마이크로 소프트 당으로

:

는 서버가 모든 네트워크 인터페이스에서 클라이언트 작업을 수신해야한다는 것을 나타내는 IP 주소를 제공합니다. 이 필드는 읽기 전용입니다.

Socket.Bind 메서드는 모든 필드를 사용하여 Socket 인스턴스가 모든 네트워크 인터페이스에서 클라이언트 작업을 수신 대기해야 함을 나타냅니다. Any 필드는 점으로 된 쿼드 표기법에서 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"(PC Public IP)라고 쓰면 오류가 발생합니다. –