Nachricht senden zwischen client (Socket UDP)

Ich bin neu in C# und ich übe mich mit Socket-Programmierung.

Ersten, die ich erstellt einen server für die client-Verbindung.

Server:

class Program {
    static void Main(string[] args) {
        int recv;
        byte[] data = new byte[1024];
        IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 1900);

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

        newsock.Bind(ipep);
        Console.WriteLine("Waiting for a client...");

        IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
        EndPoint Remote = (EndPoint)(sender);

        recv = newsock.ReceiveFrom(data, ref Remote);

        Console.WriteLine("Message received from {0}:", Remote.ToString());
        Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));

        string welcome = "Welcome to my test server";
        data = Encoding.ASCII.GetBytes(welcome);
        newsock.SendTo(data, data.Length, SocketFlags.None, Remote);

        while (true) {
            data = new byte[1024];
            recv = newsock.ReceiveFrom(data, ref Remote);

            Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
            newsock.SendTo(data, recv, SocketFlags.None, Remote);
        }
    }
}

Client:

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;

namespace serverUDPWF {
    public partial class ServerForm : Form {
        byte[] data = new byte[30];
        string input = "";
        string stringData = "";
        IPEndPoint iep,sender;
        Socket server;
        string welcome = "";
        int recv;
        EndPoint tmpRemote;

        public ServerForm() {
            InitializeComponent();
            startServer();
        }

        public void startServer() {
            iep = new IPEndPoint(
            IPAddress.Parse("127.0.0.1"), 1900);

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

            welcome = "Hello, are you there?";
            data = Encoding.ASCII.GetBytes(welcome);
            server.SendTo(data, data.Length, SocketFlags.None, iep);

            sender = new IPEndPoint(IPAddress.Any, 0);
            tmpRemote = (EndPoint)sender;

            data = new byte[30];
            recv = server.ReceiveFrom(data, ref tmpRemote);
            Console.WriteLine();

            listBox1.Items.Add("Message received from {0}:"  +  tmpRemote.ToString());
            listBox1.Items.Add(Encoding.ASCII.GetString(data, 0, recv));
        }

        private void sendMessageToserver(object sender, EventArgs e) {
            if (textBox2.Text == "") {
                MessageBox.Show("Please Enter Your Name");
            }
            else {
                int i = 30;

                input = textBox2.Text + ": " + textBox1.Text;

                if (input == "exit") {
                    this.Close();
                }
                server.SendTo(Encoding.ASCII.GetBytes(input), tmpRemote);
                textBox1.Text = "";
                data = new byte[i];

                try {
                    recv = server.ReceiveFrom(data, ref tmpRemote);
                    stringData = Encoding.ASCII.GetString(data, 0, recv);
                    listBox1.Items.Add(stringData);                        
                }
                catch (SocketException) {
                    listBox1.Items.Add("WARNING: data lost, retry message.");
                    i += 10;
                }
            }
        }   
    }
}

Mein problem ist, wie machen die Kunden nicht brauchen, um die server-ip-Adresse wie 127.0.0.1. Mein Zweites problem ist ich öffne 2-client in der gleichen Zeit, aber client a sendet Eine Nachricht zum server aber client B nicht erhalten, eine Nachricht von client A (möchte ich senden Sie ein broadcast-Typ message)

Wie kann ich das tun?

Was meinst du damit, dass "client nicht benötigen, geben Sie die server ip-Adresse"?
ich meine in einem LAN-Netzwerk-client-senden Sie einfach eine Nachricht an server aber es funktioniert nicht brauchen, definieren Sie die server-IP es nur senden Sie eine broadcast-Nachricht und der server nur einen port öffnen, wie 1900, als client senden an server über diesen port, server fangen diese Nachricht, und der client kann eine Verbindung zu server

InformationsquelleAutor MYE | 2012-02-14

Schreibe einen Kommentar