private void btnSend_Click(object sender, EventArgs e) { try { // Initialise a packet object to store the data to be sent Packet sendData = new Packet(); sendData.ChatName = this.name; sendData.ChatMessage = txtMessage.Text.Trim(); sendData.ChatDataIdentifier = DataIdentifier.Message; // Get packet as byte array byte[] byteData = sendData.GetDataStream(); // Send packet to the server clientSocket.BeginSendTo(byteData, 0, byteData.Length, SocketFlags.None, epServer, new AsyncCallback(this.SendData), null); txtMessage.Text = string.Empty; } catch (Exception ex) { MessageBox.Show("Send Error: " + ex.Message, "UDP Client", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void Client_FormClosing(object sender, FormClosingEventArgs e) { try { if (this.clientSocket != null) { // Initialise a packet object to store the data to be sent Packet sendData = new Packet(); sendData.ChatDataIdentifier = DataIdentifier.LogOut; sendData.ChatName = this.name; sendData.ChatMessage = null; // Get packet as byte array byte[] byteData = sendData.GetDataStream(); // Send packet to the server this.clientSocket.SendTo(byteData, 0, byteData.Length, SocketFlags.None, epServer); // Close the socket this.clientSocket.Close(); } } catch (Exception ex) { MessageBox.Show("Closing Error: " + ex.Message, "UDP Client", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void btnConnect_Click(object sender, EventArgs e) { try { this.name = txtName.Text.Trim(); // Initialise a packet object to store the data to be sent Packet sendData = new Packet(); sendData.ChatName = this.name; sendData.ChatMessage = null; sendData.ChatDataIdentifier = DataIdentifier.LogIn; // Initialise socket this.clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); // Initialise server IP IPAddress serverIP = IPAddress.Parse(txtServerIP.Text.Trim()); // Initialise the IPEndPoint for the server and use port 30000 IPEndPoint server = new IPEndPoint(serverIP, 30000); // Initialise the EndPoint for the server epServer = (EndPoint)server; // Get packet as byte array byte[] data = sendData.GetDataStream(); // Send data to server clientSocket.BeginSendTo(data, 0, data.Length, SocketFlags.None, epServer, new AsyncCallback(this.SendData), null); // Initialise data stream this.dataStream = new byte[1024]; // Begin listening for broadcasts clientSocket.BeginReceiveFrom(this.dataStream, 0, this.dataStream.Length, SocketFlags.None, ref epServer, new AsyncCallback(this.ReceiveData), null); } catch (Exception ex) { MessageBox.Show("Connection Error: " + ex.Message, "UDP Client", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void ReceiveData(IAsyncResult ar) { try { // Receive all data this.clientSocket.EndReceive(ar); // Initialise a packet object to store the received data Packet receivedData = new Packet(this.dataStream); // Update display through a delegate if (receivedData.ChatMessage != null) this.Invoke(this.displayMessageDelegate, new object[] { receivedData.ChatMessage }); // Reset data stream this.dataStream = new byte[1024]; // Continue listening for broadcasts clientSocket.BeginReceiveFrom(this.dataStream, 0, this.dataStream.Length, SocketFlags.None, ref epServer, new AsyncCallback(this.ReceiveData), null); } catch (ObjectDisposedException) { } catch (Exception ex) { MessageBox.Show("Receive Data: " + ex.Message, "UDP Client", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void ReceiveData(IAsyncResult asyncResult) { try { byte[] data; // Initialise a packet object to store the received data Packet receivedData = new Packet(this.dataStream); // Initialise a packet object to store the data to be sent Packet sendData = new Packet(); // Initialise the IPEndPoint for the clients IPEndPoint clients = new IPEndPoint(IPAddress.Any, 0); // Initialise the EndPoint for the clients EndPoint epSender = (EndPoint)clients; // Receive all data serverSocket.EndReceiveFrom(asyncResult, ref epSender); // Start populating the packet to be sent sendData.ChatDataIdentifier = receivedData.ChatDataIdentifier; sendData.ChatName = receivedData.ChatName; switch (receivedData.ChatDataIdentifier) { case DataIdentifier.Message: sendData.ChatMessage = string.Format("{0}: {1}", receivedData.ChatName, receivedData.ChatMessage); break; case DataIdentifier.LogIn: // Populate client object Client client = new Client(); client.endPoint = epSender; client.name = receivedData.ChatName; // Add client to list this.clientList.Add(client); sendData.ChatMessage = string.Format("-- {0} is online --", receivedData.ChatName); break; case DataIdentifier.LogOut: // Remove current client from list foreach (Client c in this.clientList) { if (c.endPoint.Equals(epSender)) { this.clientList.Remove(c); break; } } sendData.ChatMessage = string.Format("-- {0} has gone offline --", receivedData.ChatName); break; } // Get packet as byte array data = sendData.GetDataStream(); foreach (Client client in this.clientList) { if (client.endPoint != epSender || sendData.ChatDataIdentifier != DataIdentifier.LogIn) { // Broadcast to all logged on users serverSocket.BeginSendTo(data, 0, data.Length, SocketFlags.None, client.endPoint, new AsyncCallback(this.SendData), client.endPoint); } } // Listen for more connections again... serverSocket.BeginReceiveFrom(this.dataStream, 0, this.dataStream.Length, SocketFlags.None, ref epSender, new AsyncCallback(this.ReceiveData), epSender); // Update status through a delegate this.Invoke(this.updateStatusDelegate, new object[] { sendData.ChatMessage }); } catch (Exception ex) { MessageBox.Show("ReceiveData Error: " + ex.Message, "UDP Server", MessageBoxButtons.OK, MessageBoxIcon.Error); } }