Mostrar código fuente en grupos
Programa cliente:
1. Abra VS.net, use la plantilla "Aplicación de Windows" en C# para crear un nuevo proyecto, que puede denominarse "ChatClient".
2. Diseñe la interfaz. Agregue un control ListBox (usado para mostrar la lista de usuarios), un control RichTextBox (usado para mostrar mensajes de chat y mensajes del sistema), un control TextBox (usado para enviar mensajes) y un control CheckBox (usado para determinar si es privado mensaje) en la interfaz, un control StatusBar y cuatro botones de control (conectar, desconectar, iniciar grabación y enviar respectivamente). Para conocer la configuración de propiedades de cada control, consulte la configuración específica en el código fuente y no se repetirá aquí.
3. Escritura de código del programa cliente.
Cuando un cliente intenta conectarse a un servidor, debe establecer una conexión y registrarse en el servidor. La función EstablishConnection() utiliza TcpClient para conectarse al servidor y crea un NetworkStream para enviar mensajes. Además, el número de puerto es el mismo que el del lado del servidor, ambos 5555. La función EstablishConnection() es la siguiente:
Private void EstablishConnection()
{
StatusBar1. Text = "Conectarse al servidor";
Probar
{
socket de cliente = nuevo cliente TCP (dirección del servidor, puerto del servidor);
ns = conector de cliente. GetStream();
sr = nuevo StreamReader(ns);
Conexión = verdadero
}
Catch(Exception)<; /p>
{
Cuadro de mensajes. Show("¡No se puede conectar al servidor!", "Error",
MessageBoxButtons OK, MessageBoxIcon. Suspiro
StatusBar1. Text = "Disconnect";
}
}
Después de conectarse exitosamente al servidor, el programa usa la función RegisterWithServer() para enviar el comando de conexión a el servidor. El comando primero envía el nombre de usuario y luego obtiene una lista de todos los demás usuarios del servidor. La lista de todos los usuarios se muestra en el control ListBox. La función se ve así:
Private void RegisterWithServer()
{
Probar
{
cadena comando = "CONECTAR|" + ChatOut. texto;
Byte[] outbytes = System. Text.Encoding.ASCII.GetBytes(command.ToCharArray());
ns. write(outbytes, 0, outbytes. length);
respuesta del servidor de cadena = Sr. ReadLine();
Respuesta del servidor. trim();
string[]token = respuesta del servidor. split(new Char[]{ ' | ' });
if(tokens[0] == "LIST ")
{
StatusBar1. Text = "Conectado";
btnDesconectar. Habilitado = verdadero
}
for(int n = 1; n
lbChatters.
Items.Add(tokens[n].Trim(new char[]{'\r ',' \n '});
This.Text = clientname+": Conectado al servidor"; p>
p>
}
Catch(Exception)
{
MessageBox display("¡Error de registro!", "Error" ,
MessageBoxButtons, MessageBoxIcon. suspiro);
}
}
Después de eso, por supuesto, se completa el chat entre usuarios. por la función RecibirChat (). Esta función es un hilo independiente que procesa todos los mensajes recibidos por el usuario y los mensajes enviados por el usuario. El método de procesamiento es similar. al lado del servidor: p>
Private void RecibirChat()
{
bool keepalive = true
mientras(mantener vivo) p>
{
Probar
{
Byte[] buffer = nuevo Byte[2048];
ns read( buffer, 0, buffer.length);
string=system.text.encoding.ascii.getstring(buffer);
string[]token = charla.
if (tokens[0] == "CHAT ")
{
rtbChatIn.append text(tokens[1]); p>If (registro)
Autor del registro. WriteLine(tokens[1]);
}
if(token[0] = = " PRIV " )
{
rtbChatIn(" Privado de ");
rtbChatIn(tokens[1].trim() );
rtbChatIn. append text(tokens[2]+" \ r \ n ");
if (registro)
{
Registrar autor. private");
Autor del registro. write(token[1]). trim());
Autor del registro. WriteLine(tokens[2]+" \ r \ n ");
}
}
if (tokens[0] == "UNIRSE")
{
rtbChatIn. AppendText(tokens[1].trim());
rtbChatIn. AppendText("Se unió al chat\ r \ n ");
Si (registro)
{
Registrar autor. WriteLine(tokens[1]+"Se unió al chat));
}
string newguy = tokens[1].Trim(new char[]{'\r ',' \ n ' });
lbChatters. Agregar(nuevo chico);
}
if (tokens[0] == "desaparecer")
{
rtbChatIn.AppendText(tokens[1].trim());
rtbChatIn.
AppendText("Salió del chat\ r \ n ");
Si (registro)
{
Registrar autor. WriteLine(tokens[1]+"ha abandonado el chat);
}
lbChatters.Items.Remove(tokens[1]).Trim(new char[]{'\ r ', ' \ n ' });
}
if (tokens[0] == "SALIR ")
{
ns. close();
Socket de cliente. close();
keepalive = false
StatusBar1;
Conectado = falso;
btnSend. Habilitado = falso
Habilitado = falso
}
}
catch( Excepción){}
}
}
A través de las funciones anteriores, el programa cliente puede chatear libremente y el usuario también puede enviar palabras secretas a cada uno. other Por lo tanto, el programa implementa las funciones básicas de la sala de chat, pero al final todos los usuarios deben salir normalmente, por lo que se utiliza la función QuitChat(). La implementación específica de esta función es la siguiente:
{
Si (conectado)
{
Probar
{
comando de cadena = " GONE | "+nombre del cliente;
Byte[] outbytes = System.Encoding.ASCII.GetBytes(command.ToCharArray());
ns. write(outbytes, 0, outbytes. length);
Socket de cliente.
}
Catch(Exception)
{
}
}
si (registro)
registrar autor.
If (received!= null &&received.IsAlive)
Recibido.
Esto. p>
}
Hasta ahora, las partes principales del Se han introducido programas de cliente. También hay algunas funciones de procesamiento de mensajes para controles de botones, que se pueden encontrar en el código fuente. Al mismo tiempo, el programa también tiene una función de grabación de chat, que es similar a la función de grabación del popular software de chat actual. Sin embargo, por razones de espacio, no los presentaremos uno por uno aquí. Los lectores interesados pueden estudiar el código fuente al final de este artículo.
De esta forma se completa el programa cliente. El diagrama de ejecución del programa es el siguiente:
Resumen:
Presentó los conceptos básicos de socket y los principios básicos de la programación de sockets, y le mostró la programación de sockets en C# a través de un buen ejemplo. Métodos de implementación y algunas técnicas de programación. A partir de esto, no es difícil descubrir que existen muchos beneficios al usar C# para la programación de sockets e incluso para la programación de redes. Las ideas del programa de ejemplo son claras y fáciles de entender, y es un buen ejemplo. Espero que puedas estudiar bien. Al mismo tiempo, espero que puedas mejorar aún más el programa para hacerlo más potente y fácil de usar.