I am new to C # and I am involved in Socket programming.
First, I created a server to connect a client to it.
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); } } }
Customer:
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; } } } } }
My problem is how to make the client not enter the server IP address, for example 127.0.0.1. My second problem is that I open 2 clients at the same time, but client A sends a message to the server, but client B does not receive a message from client A (I want to send a message like broadcast)
How can i do this?