2017-02-22 88 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解析設置終點

​​

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

make如果背後的路由器和確保端口轉發完成客戶端和服務器上/或防火牆。

看看通過MS例子:

C# Sockets over the internet有超過互聯網插座的一些故障排除提示!