El proceso de comunicación y el diagrama esquemático del cliente al servidor son muy buenos.

Para aprender algo, siempre y cuando comprendamos el principio, lo pasaremos por alto. Ahora que he aprendido lo que he aprendido, me gustaría resumir el proceso de comunicación del cliente al servidor. Solo cuando comprendamos el principio, entenderemos que cuando aparezcan problemas de error en el proceso de desarrollo de nuestro programa, resolveremos mejor el problema.

    Primero debemos entender un vocabulario conceptual: Socket

    El significado inglés de zócalo es "agujero" o "zócalo". Como mecanismo de comunicación del proceso, tome el último significado. Usualmente también llamado "socket", se usa para describir la dirección IP y el puerto, y es el identificador de una cadena de comunicación. ( De hecho, se usa para la comunicación entre dos programas ). El zócalo es muy similar al zócalo del teléfono. Tome una red telefónica como ejemplo. Los dos lados del teléfono son equivalentes a dos programas que se comunican entre sí, y el número de teléfono puede considerarse como una dirección IP. Antes de que cualquier usuario hable, primero debe tener un teléfono, lo que equivale a solicitar un enchufe; al mismo tiempo, debe conocer el número de la otra parte (dirección IP), que equivale a tener un enchufe fijo. Luego marcar la llamada a la otra parte es equivalente a enviar una solicitud de conexión. Si la otra parte está presente e inactiva, tome el micrófono del teléfono, las dos partes pueden hablar formalmente, lo que equivale a una conexión exitosa. El proceso de dos partes hablando es el proceso de enviar una señal al teléfono y recibir la señal del teléfono, lo que equivale a enviar datos al zócalo y recibir datos del zócalo. Una vez finalizada la llamada, una de las partes cuelga el teléfono para cerrar el enchufe, cancelar la conexión y la comunicación se completa.

    La comunicación anterior se basa en dos personas que hablan como un ejemplo para explicar la comunicación en general, pero ahora si una persona en la comunicación es extranjera (habla inglés) y una persona es china (habla mandarín), los dos se comunican entre sí. , No puedo entender lo que dice la otra parte, por lo que su comunicación no puede completarse. Pero si damos una regla de que ambas partes solo pueden hablar Putonghua, no hay barrera para la comunicación entre las dos partes. Esto lleva al protocolo de comunicación.

Hay dos tipos: (protocolo Tcp y protocolo Udp):

El protocolo Tcp y el protocolo Udp es una sintaxis de datos para la transmisión de comunicación entre dos dispositivos de hardware .

- Enchufe de transmisión (STREAM):

    Es un Socket orientado a la conexión, dirigido a aplicaciones de servicio TCP orientadas a la conexión, seguro, pero ineficiente; Tcp: transmitido en forma de flujo.

- Datagram Socket (DATAGRAM):

    Es un Socket sin conexión, que corresponde a la aplicación de servicio UDP sin conexión. Es inseguro (perdido, desordenado, necesita analizar la reorganización y solicitar la retransmisión en el extremo receptor), pero es eficiente. Varios números fueron transmitidos más tarde. Es fácil perder datos durante el proceso de transmisión. Pero la velocidad de transmisión es más rápida que TCP.

Proceso de comunicación del zócalo

  • Manifestación:
  • Lado del servidor:

- Solicite un socket  (socketWatch) para monitorear

- Enlace a una dirección IP y un puerto

- Comience a escuchar y espere a que el cliente se conecte

- Cuando hay una conexión, cree un socket (socketConnection) para comunicarse con el cliente

- Monitoreo continuo, esperando la conexión del próximo cliente

El código es el siguiente:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Net.Sockets;

using System.Net;

using System.Threading;

namespace MyChatRoomClient

{

    public partial class FChatClient : Form

    {

        public FChatClient()

        {

            InitializeComponent();

            TextBox.CheckForIllegalCrossThreadCalls = false;

        }

        Thread threadClient = null; //客户端 负责 接收 服务端发来的数据消息的线程

        Socket socketClient = null;//客户端套接字

//客户端发送连接请求到服务器

        private void btnConnect_Click(object sender, EventArgs e)

        {

            IPAddress address = IPAddress.Parse(txtIP.Text.Trim());//获得IP

            IPEndPoint endpoint = new IPEndPoint(address, int.Parse(txtPort.Text.Trim()));//网络节点

//创建客户端套接字

            socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            //向 指定的IP和端口 发送连接请求

            socketClient.Connect(endpoint);

            //客户端 创建线程 监听服务端 发来的消息

            threadClient = new Thread(RecMsg);

            threadClient.IsBackground = true;

            threadClient.Start();

        }

        /// <summary>

/// 监听服务端 发来的消息

/// </summary>

        void RecMsg()

        {

            while (true)

            {

                //定义一个 接收用的 缓存区(2M字节数组)

                byte[] arrMsgRec = new byte[1024 * 1024 * 2];

                //将接收到的数据 存入 arrMsgRec 数组,并返回 真正接收到的数据 的长度

               int length=  socketClient.Receive(arrMsgRec);

                //此时 是将 数组 所有的元素 都转成字符串,而真正接收到的 只有服务端发来的几个字符

               string strMsgRec = System.Text.Encoding.UTF8.GetString(arrMsgRec, 0, length);

                ShowMsg(strMsgRec);

            }

        }

        void ShowMsg(string msg)

        {

            txtMsg.AppendText(msg + "\r\n");

        }

    }

}

Diagrama del proceso de comunicación

A través del diagrama de flujo anterior, podemos ver que un proceso de comunicación básico entre el cliente y el servidor, resume el papel del modo de aplicación general de Socket (cliente y servidor):

Servidor: hay al menos dos sockets, uno es el servidor responsable de escuchar las solicitudes de conexión del cliente, pero no es responsable de comunicarse con el cliente solicitante, y el otro es que cada vez que el servidor recibe al cliente con éxito, pero en el servidor Cree un socket para comunicarse con el cliente solicitante.

Cliente: especifique la dirección del servidor y el puerto al que conectarse y cree un objeto de socket para inicializar una conexión TCP al servidor.

Reimpreso de: http://www.codeceo.com/article/client-to-server.html

 

Publicado 24 artículos originales · elogiado 46 · 50,000+ visitas

Supongo que te gusta

Origin blog.csdn.net/m0_37777700/article/details/104041376
Recomendado
Clasificación