private void BtnOFD_Click(object sender, EventArgs e) { using (OpenFileDialog openFileDialog = new OpenFileDialog()) { openFileDialog.Filter = "Image|*.jpg|Arquivo txt|*.txt"; openFileDialog.Title = "Selecione uma imagem"; if (openFileDialog.ShowDialog() == DialogResult.OK) { ProjetoChat.Mensagem msg = new ProjetoChat.Mensagem(string.Empty, null, nick, DateTime.Now, null); if (Path.GetExtension(openFileDialog.FileName).Equals(".jpg")) { Image img = Image.FromFile(openFileDialog.FileName); msg.setImage(img); } if (Path.GetExtension(openFileDialog.FileName).Equals(".txt")) { string[] conteudo = FileReadWrite.ReadTextFile(openFileDialog.FileName); msg.setTxt(conteudo); } byte[] buffer = SerializeMensagem(msg); if (buffer.Length >= 102400) { MessageBox.Show("Arquivo muito grande, não vai ser possivel fazer a transferencia", "ops..."); } else { ClientTCP.SendData(buffer); } } } }
private void BtnSendMSG_Click(object sender, EventArgs e) { if (!txtMensagem.Text.Equals(string.Empty)) { ProjetoChat.Mensagem msg = new ProjetoChat.Mensagem(txtMensagem.Text, null, nick, DateTime.Now, null); ClientTCP.SendData(SerializeMensagem(msg)); txtMensagem.Text = string.Empty; } }
private void CloseClient(int index) { closing = true; socket.Close(); Console.WriteLine("Conexão com " + ip + " finalizada."); ServerTCP.clients.Remove(this); ProjetoChat.Mensagem msgToAll = new ProjetoChat.Mensagem("Um usuario foi desconectado", null, "Servidor", DateTime.Now, null); byte[] msgTNCbyte = ServerTCP.SerializeMensagem(msgToAll); ServerTCP.SendDataToAll(msgTNCbyte); }
public void ReceiveCallback(IAsyncResult ar) { try { Socket socket = (Socket)ar.AsyncState; int messageSize = socket.EndReceive(ar); if (messageSize <= 0) { CloseClient(index); } else { while (true) { buffer = new byte[1024 * 100]; socket.Receive(buffer); using (MemoryStream ms = new MemoryStream(buffer)) { ProjetoChat.Mensagem msg = new ProjetoChat.Mensagem(null, null, null, DateTime.Now, null); try { BinaryFormatter bf = new BinaryFormatter(); msg = (ProjetoChat.Mensagem)bf.Deserialize(ms); if (msg.getContent().Equals(string.Empty)) { if (msg.getImage() != null) { Console.WriteLine("(" + msg.getDataEnvio() + ") " + socket.RemoteEndPoint.ToString() + " (" + msg.getRemetente() + "): imagem size " + msg.getImage().Size); } else { Console.WriteLine("(" + msg.getDataEnvio() + ") " + socket.RemoteEndPoint.ToString() + " (" + msg.getRemetente() + "): text file size " + msg.getTxt().Length + " lines"); } } else { Console.WriteLine("(" + msg.getDataEnvio() + ") " + socket.RemoteEndPoint.ToString() + " (" + msg.getRemetente() + "): " + msg.getContent()); } } catch (Exception ex) { Console.WriteLine("Erro de converçao: " + ex.Message); } finally{ ms.Close(); } } ServerTCP.SendDataToAll(buffer); } } } catch { CloseClient(index); } }
public static byte[] SerializeMensagem(ProjetoChat.Mensagem msg) { using (MemoryStream ms = new MemoryStream()) { byte[] buffer = new byte[1024 * 100]; try { BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(ms, msg); buffer = ms.ToArray(); } catch (Exception ex) { throw ex; } finally { ms.Close(); } return(buffer); } }
public static void MesageRecievedFromServer(byte[] buffer) { if (listaMensagens.InvokeRequired) { DelegateFileFromServer del = new DelegateFileFromServer(MesageRecievedFromServer); listaMensagens.Invoke(del, buffer); } else { using (MemoryStream ms = new MemoryStream(buffer)) { ProjetoChat.Mensagem msg = new ProjetoChat.Mensagem(null, null, null, DateTime.Now, null); try { BinaryFormatter bf = new BinaryFormatter(); msg = (ProjetoChat.Mensagem)bf.Deserialize(ms); mensagens.Add(msg); if (msg.getImage() != null) { listaMensagens.Items.Add("(" + msg.getDataEnvio() + ") " + msg.getRemetente() + " enviou uma imagem (double click para visualizar)"); } else { if (msg.getContent().Equals(string.Empty)) { listaMensagens.Items.Add("(" + msg.getDataEnvio() + ") " + msg.getRemetente() + " enviou um arquivo texto (double click para visualizar)"); } else { listaMensagens.Items.Add("(" + msg.getDataEnvio().ToString() + ") " + msg.getRemetente() + " says: " + msg.getContent()); } } } catch (Exception) { MessageBox.Show("Tivemos um erro ao receber a mensagem"); } finally { ms.Close(); } } } }
private void Button1_Click(object sender, EventArgs e) { if (txtIP.Text.Equals(string.Empty) || txtPort.Text.Equals(string.Empty)) { listaMensagens.Items.Add("Informe o IP e a porta do servidor."); } else { if (radioButton1.Checked) { nick = "Anonimo"; } else { if (!txtNick.Text.Equals(string.Empty)) { nick = txtNick.Text; } else { MessageBox.Show("Nickname em branco", "ops..."); return; } } try { ClientTCP.ConnectToServer(txtIP.Text, Convert.ToInt32(txtPort.Text)); Thread.Sleep(100); ProjetoChat.Mensagem msg = new ProjetoChat.Mensagem(string.Empty, null, nick, DateTime.Now, null); ClientTCP.SendData(SerializeMensagem(msg)); btnConnect.Enabled = false; btnOFD.Enabled = true; btnSendMSG.Enabled = true; this.Text = "Connected to IP: " + txtIP.Text + "/ Port: " + txtPort.Text; } catch (Exception ex) { MessageBox.Show("Não foi possivel se conectar ao servidor" + "\n Verifique se o servidor está ativo ou" + "\n se você inseriu o IP e a porta correta\n" + ex.Message, "ops..."); } } }
private static void AcceptCallback(IAsyncResult ar) { Socket socket = serverSocket.EndAccept(ar); serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), null); Client clientFound = new Client(); clientFound.socket = socket; clientFound.index = clients.Count; clientFound.ip = socket.RemoteEndPoint.ToString(); clientFound.StartClient(); clients.Add(clientFound); Console.WriteLine("Conexão recebida de " + clientFound.ip); ProjetoChat.Mensagem msgToNewCliente = new ProjetoChat.Mensagem("Conexão realizada com sucesso!", null, "Servidor", DateTime.Now, null); ProjetoChat.Mensagem msgToAll = new ProjetoChat.Mensagem("Novo membro adicionado ao chat", null, "Servidor", DateTime.Now, null); byte[] msgTNCbyte = SerializeMensagem(msgToNewCliente); byte[] msgTA = SerializeMensagem(msgToAll); SendDataTo(clientFound, msgTNCbyte); SendDataToAll(msgTA); }
private static void ConnectionCallback(IAsyncResult ar) { try { clientSocket.EndConnect(ar); while (isConnected) { byte[] dataReceived = new byte[1024 * 100]; clientSocket.Receive(dataReceived); Form1.MesageRecievedFromServer(dataReceived); isConnected = true; } } catch (Exception) { isConnected = false; ProjetoChat.Mensagem msg = new ProjetoChat.Mensagem("Erro o conectar ao servidor", null, "Client", DateTime.Now, null); Form1.MesageRecievedFromServer(Form1.SerializeMensagem(msg)); } }