Laden...

Bild übertragen per TCP/IP

Erstellt von max1761995 vor 10 Jahren Letzter Beitrag vor 10 Jahren 2.032 Views
M
max1761995 Themenstarter:in
23 Beiträge seit 2013
vor 10 Jahren
Bild übertragen per TCP/IP

Hallo zusammen,

Ich versuche im Moment ein Bild per TCP IP zu übertragen.

Hier mein Code:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Bild_per_TCP_IP
{
    public partial class Form1 : Form
    {
        Socket sck;
        EndPoint epLocal, epRemote;

        public Form1()
        {
            InitializeComponent();
            sck = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            sck.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
            txtIP.Text = getLocalIp();
            txtIP2.Text = getLocalIp();
            txtPORT.Text = "80";
            txtPORT2.Text = "81";

        }

        private void btnLoad_Click(object sender, EventArgs e)
        {

            OpenFileDialog ofD = new OpenFileDialog();
            ofD.InitialDirectory = "C://";
            ofD.Multiselect = false;
            ofD.Filter = "png files (*.png)|*.png";

            ofD.ShowDialog();
            if (ofD.ShowDialog() == DialogResult.OK)
            {
                
                picSend.Load(ofD.FileName);
               
            }
        }

        private void btnConnect_Click(object sender, EventArgs e)
        {
            try
            {
                epLocal = new IPEndPoint(IPAddress.Parse(txtIP.Text), Convert.ToInt32(txtPORT.Text));
                sck.Bind(epLocal);

                epRemote = new IPEndPoint(IPAddress.Parse(txtIP2.Text), Convert.ToInt32(txtPORT2.Text));
                sck.Connect(epRemote);

                byte[] buffer = new byte[1500];


                sck.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref epRemote, new AsyncCallback(MessageCallBack), buffer);
                btnSend.Enabled = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        private void MessageCallBack(IAsyncResult aResult)
        {
            try
            {
                int size = sck.EndReceiveFrom(aResult, ref epRemote);
                if (size > 0)
                {
                    byte[] receivedData = new byte[1500];
                    receivedData = (byte[])aResult.AsyncState;

                 

                    Image img;
                    img = byteArrayToImage(receivedData);

                    picErhalt.Image = img;


                }

                byte[] buffer = new byte[1500];
                sck.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref epRemote, new AsyncCallback(MessageCallBack), buffer);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }


        }

        public byte[] imageToByteArray(System.Drawing.Image imageIn)
        {
            MemoryStream ms = new MemoryStream();
            imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
            return ms.ToArray();
        }
        public Image byteArrayToImage(byte[] byteArrayIn)
        {
            MemoryStream ms = new MemoryStream(byteArrayIn);
            Image returnImage = Image.FromStream(ms);
            return returnImage;
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            byte[] img;
            img = imageToByteArray(picSend.Image);
            sck.Send(img);
        }
        public string getLocalIp()
        {
            IPHostEntry host;
            host = Dns.GetHostEntry(Dns.GetHostName());

            foreach (IPAddress ip in host.AddressList)
            {
                if (ip.AddressFamily == AddressFamily.InterNetwork)
                {
                    return ip.ToString();
                }
            }
            return "127.0.0.1";
        }
    }
}


Im Anhang ist eine Fehlermeldung zu sehen. Aus irgend einem Grund geht es nicht, kann mir jemand einen Lösungs Ansatz bieten ?
Mit freundlichen Grüssen
max1761995

4.939 Beiträge seit 2008
vor 10 Jahren

Hallo,

Port 80 ist keine gute Wahl, denn dies ist ja der reservierte Port für den HTTP-Webserver.
Nimm einen (freien) Port oberhalb von 1024.

M
max1761995 Themenstarter:in
23 Beiträge seit 2013
vor 10 Jahren

Hallo,

Port 80 ist keine gute Wahl, denn dies ist ja der reservierte Port für den HTTP-Webserver.
Nimm einen (freien) Port oberhalb von 1024.

An dem Liegt es nicht, ich habe es schon mit mehreren Ports ausprobiert...

Z
403 Beiträge seit 2007
vor 10 Jahren

Hallo max1761995,

sck = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

Du schreibst von TCP, aber verwendest UDP?

André