UDP Client server hvor client bag NAT
HejJeg sidder og roder med et simpelt UDP Netværks program, for at se om det kan lykkedes at lave 2 vejs kommunikation mellem en computer bag NAT og en server, men det volder lidt problemer selvom det skulle være lige til.
Hvad gør jeg forkert?
på begge computere trykker jeg på min Server knap for at vente på en pakke, men min "client" bag NAT kan jeg ikke få til at modtage, hvorimod "server" som ikke er bag NAT godt kan modtage, når "serveren" modtager for den også ip, og porten "1114", hvor porten variere lidt, men "serveren" skal vel sende sit svar til "source" porten.
min kode ser ud som følger:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace sender
{
public partial class Form1 : Form
{
private UdpClient udpklient = new UdpClient();
UdpClient server = new UdpClient(12345);
public Form1()
{
InitializeComponent();
}
private void BtnServer_Click(object sender, EventArgs e)
{
//start server tråd
Thread ServerTråd = new Thread(new ThreadStart(Serveren));
ServerTråd.Start();
}
private void Serveren()
{
byte[] data;
string str = "";
IPEndPoint recvpt = new IPEndPoint(IPAddress.Any, 0);
while (true)
{
data = server.Receive(ref recvpt);
str = Encoding.ASCII.GetString(data);
if (str == "hej")
{
server.Send(data, data.Length, recvpt);
}
MessageBox.Show(str + " - ip : " + recvpt.Address.ToString() + " port : " + recvpt.Port.ToString());
}
}
private void BtnSend_Click(object sender, EventArgs e)
{
Send(textBox1.Text, Txtip.Text, int.Parse(TxtPort.Text));
}
private void Send(string Besked, string Modtager, int port)
{
byte[] senddata = Encoding.ASCII.GetBytes(Besked);
udpklient.Send(senddata, Besked.Length, Modtager, port);
}
private void Send(string Besked, IPEndPoint Modtager)
{
byte[] senddata = Encoding.ASCII.GetBytes(Besked);
udpklient.Send(senddata, senddata.Length, Modtager);
}
}
}