をDGRAMを送信することはできません:)は、私は助けを必要とする外部IPに
を、私はうまくいけば、誰かがここで私を助けることができる、Google検索のoをトンを行われ、何の答えを見つけていない:)
をので、私は簡単なP2Pのビデオを足すいますチャットクライアントは、テキストボックスからIPを作成し、ポート5096の「その他」に接続します。したがって、外部IPに接続しようとすると問題が発生します。リスナーはパッケージを受け取ることはありません。画像を転送することはできません。誰か助けてくれますか?
これは私のUdpPictureSenderのコードです:
class UDPPictureSender
{
bool closedSender = false;
Socket sending_socket;
IPAddress send_to_address;
IPEndPoint sending_end_point;
MemoryStream imageMemoryStream;
public UDPPictureSender()
{
initializeUdpPictureSender();
}
public void initializeUdpPictureSender()
{
sending_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
send_to_address = IPAddress.Parse(ConnectionSettings.ipAdress);
sending_end_point = new IPEndPoint(send_to_address, 5096);
}
public void sendImage(Image image)
{
if (closedSender)
{
initializeUdpPictureSender();
}
imageMemoryStream = new MemoryStream();
image.Save(imageMemoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);
Byte[] bytes = imageMemoryStream.GetBuffer();
sending_socket.SendTo(bytes, sending_end_point);
imageMemoryStream.Flush();
}
public void closeConnection()
{
sending_socket.Close();
send_to_address = null;
sending_end_point = null;
closedSender = true;
}
}
これはUDPListenerのコードです:
class UDPListener
{
private const int listenPort = 5096;
bool done = false;
bool stoped = false;
UdpClient listener;
IPEndPoint groupEP;
Image received_data;
byte [] receive_byte_array;
MemoryStream currentMemoryStream;
public UDPListener()
{
startupSettings();
}
public void startupSettings()
{
groupEP = new IPEndPoint(IPAddress.Any, listenPort);
listener = new UdpClient(listenPort);
}
public Image listenForImages()
{
if (stoped)
{
startupSettings();
stoped = false;
}
try
{
while (!done)
{
receive_byte_array = listener.Receive(ref groupEP);
currentMemoryStream = new MemoryStream(receive_byte_array);
received_data = Image.FromStream(currentMemoryStream);
return received_data;
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
listener.Close();
return null;
}
public void closeConnection()
{
listener.Close();
stoped = true;
}
}
誰も私を助けることができますか? ConnectionSettings.ipAdress
が有効なIPv4またはIPv6アドレスではないため、例外がIPAddress.Parse
からスローされていることを事前
私はそれをチェックし、trim()を使用しました。 – hrza
@hrza何が分かりにくいですか? IPAddress.Parseに無効なアドレス(可能)を渡します。 '無効なIPアドレスが指定されました.'あなたのコードをチェックし、何が通過したかを見てください。 –
私は解析すべき文字列の例を教えていただけますか? – hrza