我需要帮助:)
我已经完成了谷歌搜索,没有找到答案,希望有人可以帮助我:)
所以,我正在编写简单的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;
}
}
任何人都可以帮助我吗?
提前致谢
答案 0 :(得分:2)
IPAddress.Parse
引发了异常,因为ConnectionSettings.ipAdress
不是有效的IPv4或IPv6地址。
您使用的是有效的IP地址。也许你有一个嵌入空间或类似的东西。
答案 1 :(得分:0)
在您的数据发送代码中,尝试多次发送数据。在第一个实例中,您不必在接收器端接收数据。它的UDP而不是TCP,所以很少确保交付,除非你有一些机制来确保交付。确保你有一个固定的缓冲区大小,并尝试以块的形式而不是整体发送图像。