salas de chat para vários jogadores fáceis implementados em C #
Apenas uma função de chat em grupo
o servidor
o sistema a utilizar; a usando o System.Collections.Generic; a usando o System.ComponentModel; a usando o System.Data; a usando o System.Drawing; a usando o System.Linq; a usando o System.Net; a usando as System.Net.Sockets; a usando o System.Text; a utilização do sistema. enfiando; a usando System.Threading.Tasks; a usando System.Windows.Forms; namespace FinalChatRoomClient { cliente classe parcial pública: Form { // cliente é responsável por receber dados enviados pelo fio de mensagens do servidor o fio threadClient = null; // cria cliente extremidade do soquete, o servidor de conexão responsável por soquete SocketClient = null; cliente pública () { InitializeComponent (); // verificar a caixa de texto fechado operação cross-fio = Para falsos TextBox.CheckForIllegalCrossThreadCalls; } private void start_Click (object sender, EventArgs e) { // obter o endereço IP do objeto na caixa de texto o endereço IPAddress = IPAddress.Parse (txtIp.Text.Trim ()); // Cria IP e compreendendo nó de rede objetos portas IPEndPoint Endpoint = new new IPEndPoint (endereço, int.Parse (txtPort.Text.Trim ())); // criar um socket de cliente, se conectar ao servidor responsável por socketClient = novo socket (AddressFamily.InterNetwork, SocketType . Stream, ProtocolType.Tcp); o try { // o cliente se conecta ao servidor } a captura (a SocketException EX) socketClient.Connect (endpoint); ShowMsg ( "servidor de conexão do cliente com sucesso"); de byte [] = arrMsg Encoding.UTF8.GetBytes (strMsg ); { ShowMsg ( "exceção de cliente do servidor de conexão:" + ex.Message); } o catch (Exception ex) { ShowMsg ( "exceção de servidor de conexão do cliente ocorre:" + ex.Message); } threadClient o Tópico novas novas = (receiveMsg) ; threadClient.IsBackground = true; threadClient.Start (); } private void btnSend_Click (Object sender, EventArgs e) { corda strMsg txtMsg.Text.Trim = (); // String facilmente convertida em uma matriz binária de transmissão da rede byte [] = new byte novo arrMsgSend [arrMsg.Length + 1.]; arrMsgSend [0] = 0; // conjunto sinalizador de bit 0 representa o texto transmitidas Buffer.BlockCopy (arrMsg, 0, arrMsgSend ,. 1, arrMsg.Length); o try { socketClient.Send (arrMsgSend); // envia uma caixa de texto da mensagem vazia mensagem ; "this.txtMsg.Text =" } o engate (uma SocketException EX) { ; ": (+ ex.Message ShowMsg" excepção ocorre quando um cliente envia uma mensagem) } o engate (excepção EX) { enquanto ShowMsg (cliente envia uma mensagem " exceção: "+ ex.Message); } } private void ShowMsg (string MSG) { txtRecord.AppendText (MSG + "\ R & lt \ n-"); } privada vazio receiveMsg () { o while (true) { // definição de uma mensagem recebida pelo buffer matriz de bytes (2M tamanho) byte [] = arrMsgRev novo new byte [ 1024 * 1024 * 2]; // os dados recebidos em arrMsgRev, e retorna um comprimento real dos dados recebidos comprimento int = -1; o try { comprimento = socketClient.Receive (arrMsgRev); } a captura (um SocketException EX) { ShowMsg ( "exceção ocorre quando um cliente recebe uma mensagem:" + ex.Message); break; } a lingueta (excepção EX) o prendedor (excepção EX) { MessageBox.Show ( "exceção ocorre quando um cliente recebe uma mensagem:" + ex.Message); break; } // neste caso, todos os elementos do array (cada byte) são transformados em uma corda, a única verdadeiramente recebeu o servidor enviada alguns caracteres Cadeia strMsgReceive = Encoding.UTF8.GetString (arrMsgRev, 0, comprimento); Console.WriteLine (strMsgReceive); ShowMsg (strMsgReceive); } } } }
cliente
o sistema a utilizar; a usando o System.Collections.Generic; a usando o System.ComponentModel; a usando o System.Data; a usando o System.Drawing; a usando o System.Linq; a usando o System.Net; a usando as System.Net.Sockets; a usando o System.Text; a utilização do sistema. enfiando; a usando System.Threading.Tasks; a usando System.Windows.Forms; namespace FinalChatRoomClient { cliente classe parcial pública: Form { // cliente é responsável por receber dados enviados pelo fio de mensagens do servidor o fio threadClient = null; // cria cliente extremidade do soquete, o servidor de conexão responsável por soquete SocketClient = null; cliente público) ( { InitializeComponent (); // verificar a caixa de texto fechado operação cross-fio = Para falsos TextBox.CheckForIllegalCrossThreadCalls; } private void start_Click (object sender, EventArgs e) { // obter o endereço IP do objeto na caixa de texto o endereço IPAddress = IPAddress.Parse (txtIp.Text.Trim ()); // Cria IP e compreendendo nó de rede objetos portas IPEndPoint Endpoint = new new IPEndPoint (endereço, int.Parse (txtPort.Text.Trim ())); // criar um socket de cliente, se conectar ao servidor responsável por socketClient = novo socket (AddressFamily.InterNetwork, SocketType . Stream, ProtocolType.Tcp); o try { // o cliente se conecta ao servidor } a captura (a SocketException EX) socketClient.Connect (endpoint); ShowMsg ( "servidor de conexão do cliente com sucesso"); de byte [] = arrMsg Encoding.UTF8.GetBytes (strMsg ); { ShowMsg ( "exceção de cliente do servidor de conexão:" + ex.Message); } o catch (Exception ex) { ShowMsg ( "exceção de servidor de conexão do cliente ocorre:" + ex.Message); } threadClient o Tópico novas novas = (receiveMsg) ; threadClient.IsBackground = true; threadClient.Start (); } private void btnSend_Click (Object sender, EventArgs e) { corda strMsg txtMsg.Text.Trim = (); // String facilmente convertida em uma matriz binária de transmissão da rede byte [] = new byte novo arrMsgSend [arrMsg.Length + 1.]; arrMsgSend [0] = 0; // conjunto sinalizador de bit 0 representa o texto transmitidas Buffer.BlockCopy (arrMsg, 0, arrMsgSend ,. 1, arrMsg.Length); o try { socketClient.Send (arrMsgSend); // caixa de texto da mensagem clara mensagem enviada this.txtMsg.Text = ""; } a captura (a SocketException EX ) { ShowMsg ( "exceção ocorre quando um cliente envia uma mensagem:" + ex.Message); } o catch (Exception ex) { ShowMsg ( "exceção ocorre quando um cliente envia uma mensagem:" + ex.Message); } } privada ShowMsg vazio (string MSG) { txtRecord.AppendText (MSG + "\ R & lt \ n-"); } vazio receiveMsg privada () { o while (true) { // definição de uma mensagem recebida pelo buffer matriz de bytes (2M tamanho) byte [] = new byte novo arrMsgRev [1024 * 1024 * 2]; // dados recebidos depósito arrMsgRev, e retorna um comprimento real dos dados recebidos comprimento int = -1; o try { comprimento = socketClient.Receive (arrMsgRev); } a captura (um SocketException eX) { ShowMsg ( "excepção ocorre quando um cliente recebe uma mensagem:" + ex .message); break; } o prendedor (excepção EX) { MessageBox.Show ( "excepção ocorre quando um cliente recebe uma mensagem:" + ex.Message); break; } // neste caso, todos os elementos da matriz (cada byte) são transformados em uma cadeia, mas a recepção reais enviados para o servidor apenas alguns caracteres Cordas strMsgReceive = Encoding.UTF8.GetString (arrMsgRev, 0, comprimento); Console.WriteLine (strMsgReceive); ShowMsg (strMsgReceive); } } } }