コード例 #1
0
 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);
             }
         }
     }
 }
コード例 #2
0
 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;
     }
 }
コード例 #3
0
 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);
 }
コード例 #4
0
 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); }
 }
コード例 #5
0
 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);
     }
 }
コード例 #6
0
 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();
             }
         }
     }
 }
コード例 #7
0
 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...");
         }
     }
 }
コード例 #8
0
        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);
        }
コード例 #9
0
 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));
     }
 }