2017-02-22 18 views
0

Привет, я изучаю, как писать приложение с помощью сокетов, есть мой вопрос. Как я могу подключиться сейчас только в локальной сети, я имею в виду .. я отправлю свое клиентское приложение своему другу, и он сможет подключиться к моему серверу. есть код:C# Как подключиться к общему ip

клиент:

Socket sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 

sck.Bind(new IPEndPoint(IPAddress.Parse("xx.xx.31.87"), 56597)); 
sck.Listen(100);//maksymalna ilosc polaczen oczekujacych 

Socket accepted = sck.Accept(); 
byte[] Buffer = new byte[accepted.SendBufferSize]; 

int bytesRead = accepted.Receive(Buffer); 


byte[] formatted = new byte[bytesRead]; 


for (int i = 0; i < bytesRead; i++) 
    formatted[i] = Buffer[i]; 


string strData = Encoding.ASCII.GetString(formatted); 
Console.Write(strData + "\r\n"); 

Console.Read(); 

sck.Close(); 

сервер:

Socket sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 

sck.Bind(new IPEndPoint(IPAddress.Parse("xx.xx.31.87"), 56597)); //yes i censored ip. 
sck.Listen(100);//maksymalna ilosc polaczen oczekujacych 

Socket accepted = sck.Accept(); 
byte[] Buffer = new byte[accepted.SendBufferSize]; 

int bytesRead = accepted.Receive(Buffer); 


byte[] formatted = new byte[bytesRead]; 


for (int i = 0; i < bytesRead; i++) 
     formatted[i] = Buffer[i]; 


string strData = Encoding.ASCII.GetString(formatted); 
Console.Write(strData + "\r\n"); 

Console.Read(); 

sck.Close(); 

Я сделал перенаправление портов, но когда я хочу написать IPEndPoint мой адрес это дает мне ошибку как недействительные IP.

+0

Как я могу подключиться НЕ только в локальной сети ******************* –

+0

Вы используете свой публичный IP-адрес? Или IP-адрес локальной сети? – Pikoh

+0

Ваш друг за маршрутизатором? Если это так, то ему, вероятно, потребуется переадресовать любой порт, который вы используете. –

ответ

0

Попробуйте установить конечные точки путем разрешения через DNS на клиенте и сервере

IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName()); 
IPAddress ipAddress = ipHostInfo.AddressList[0]; 
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 56597); 

и

Socket listener = new Socket(AddressFamily.InterNetwork, 
     SocketType.Stream, ProtocolType.Tcp); 

Убедитесь, что переадресации портов осуществляется как на стороне клиента и сервера, если за маршрутизаторами и/или брандмауэры.

Посмотрите на примерах MS:

C# Sockets over the internet имеет некоторые советы по устранению неполадок для розеток над интернетом!

Смежные вопросы