Asynchrones Empfangen mit Sockets

sebbi1234

Grünschnabel
Hallo, ich bin gerade dabei ein Multiplayer-Spiel zu programmieren. Dazu will ich die Möglichkeit des asynchronen Empfangens bei Sockets verwenden, damit mein Spiel nicht immer hängt, wenn Daten von einem anderen Spieler benötigt werden. Jetzt hab ich mich mal in diese Thematik eingelesen und ein kleines Programm nur zum Empfangen, also einen Server geschrieben. Jetzt wäre meine Frage, ob das so funktioniert:

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
1using System.Net;
using System.IO;

namespace WindowsApplication2
{
    public partial class Form1 : Form
    {
        public Socket listener;
        public Socket m_socWorker;
        byte[] DataBuffer = new byte[10];
        public AsyncCallback pfnCallBack;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs b)
        {
            StartListening();
        }
       
        public void StartListening()
        {
            try
            {
                listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPEndPoint ipLocal = new IPEndPoint(IPAddress.Any, meinport);
                listener.Bind(ipLocal);
                listener.Listen(1000);
                listener.BeginAccept(new AsyncCallback(ClientConnected), null);
              
            }
            catch (SocketException se)
            {
                MessageBox.Show(se.Message);
            }
        }
        public void ClientConnected(IAsyncResult asyn)
        {
            try
            {
              m_socWorker = listener.EndAccept (asyn);
              listener.BeginReceive(DataBuffer, 0, DataBuffer.Length, SocketFlags.None, new AsyncCallback(DatenErhalten), null);
            }
            catch(ObjectDisposedException)
            {
            }
            catch(SocketException se)
            {
                MessageBox.Show(se.Message);
                //Springt immer hier rein
            }
        }
        public void DatenErhalten(IAsyncResult asyn)
        {
            MessageBox.Show("empfangen");
        }



        
    }
}

Dann hätte ich dazu noch zwei Fragen:
1. Wie würde bitte der Code in der DatenErhalten()-Methode aussehen, um das Empfangene in einen String umzuwandeln?
2. Könnte jemand vielleicht ein kleines, möglichst ebenfalls einfaches Client-Programm hier rein schreiben, dass das asynchrone Senden beschreibt?

Gruß
Sebastian
 
Zurück