Red de conocimiento informático - Material del sitio web - Hable más sobre el código fuente del software

Hable más sobre el código fuente del software

Generalmente, la información se transfiere a través de sockets.

Programa cliente:

1. Abra VS.net y cree un nuevo proyecto utilizando la plantilla "Aplicación de Windows" en C#, 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();

cadena[]token = respuesta del servidor. split(new Char[]{ ' | ' });

if(tokens[0] == "LIST ")

{

StatusBar1.

Text = "Conectado";

btnDesconectar. Habilitado = true

}

for(int n = 1; n

lbChatters.Items.Add(tokens[n].Trim(new char[] {'\r ', ' \n ' });

Esto. Texto = nombre del cliente ": Conectado al servidor"

}

Capturar (Excepción); )

{

MessageBox. display("¡Error de registro!", "Error",

MessageBoxButtons OK, MessageBoxIcon. exclamación); p>}

}

Después de eso, por supuesto, hay un chat entre usuarios, que se completa con la función RecibirChat(). Esta función es un hilo independiente que procesa todo. mensajes obtenidos por el usuario y mensajes enviados por el usuario Maneja principalmente chat, PRIV, unirse, salir, salir y otros comandos. Las funciones específicas se implementan de la siguiente manera:

RecibirChat privado ()

{

bool keepalive = true

mientras(mantener vivo)

{

Probar

{

Byte[] buffer = nuevo byte[2048];

ns.read(buffer, 0, buffer. length);

temblor de cadena = sistema.text.codificación.ascii.getstring(buffer);

string[]token = chatter(new Char[]{' |'}); [0] == "CHAT ")

{

rtbChatIn. append text(tokens[1]);

if (registro)

Autor del registro. WriteLine(tokens[1]);

}

if(token[0]= = " PRIV ")

{

rtbChatIn.AppendText("Privado de ");

rtbChatIn.AppendText(tokens[1].trim());

rtbChatIn(tokens. [2] ] " \ r \ n ");

if (registro)

{

Registrar autor. write("private");

Autor del diario. escribir (fichas [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. elementos Agregar (chico nuevo);

}

if (tokens[0] == "desaparecer")

{

rtbChatIn. AppendText(tokens[1].trim());

rtbChatIn. AppendText("Salió del chat\ r \ n ");

Si (registro)

{

Registrar autor. WriteLine(tokens[1] "Chat izquierdo);

}

lbChatters.Items.Remove(tokens[1]).Trim(new char[]{'\r ' , ' \ n ' });

}

if (tokens[0] == "SALIR ")

{

ns .close();

ClientSocket.close();

keepalive = false

StatusBar1

Conectado = false;

p>

btnSend. Habilitado = falso

Habilitado = falso

}

}

catch(Exception){}

}

}

A través de las funciones anteriores, los programas cliente pueden chatear libremente y los usuarios pueden enviarse palabras secretas entre sí. Por lo tanto, el programa lo implementa. las funciones básicas de la sala de chat, pero al final todos los usuarios deben salir normalmente, por lo que la implementación específica de esta función es la siguiente:

Private void QuitChat()

{

Si (conectado)

{

Intentar

{

cadena comando = " GONE | " nombre del cliente ;

Byte[] outbytes = System. Text.Encoding.ASCII.GetBytes(command.ToCharArray());

ns .

Socket de cliente. close();

}

catch(Exception)

p>

{

}

}

if (registro)

autor del registro.

If (recibido!= amplificador nulo amprecibido.IsAlive)

Recibido. abort();

Esto. p>}

Hasta ahora, se han introducido las partes principales del programa 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.