Red de conocimiento informático - Problemas con los teléfonos móviles - Programación de la suite TCP

Programación de la suite TCP

El código está por llegar. .

Servidor:

Usar el sistema;

Usar el sistema. recolectar. Genérico;

Uso del sistema. Modelo de componentes;

Utilizar el sistema. Datos;

Utilizar el sistema. Dibujo;

Usa el sistema. Texto;

Usa el sistema. Windows Forms

Usa el sistema. Net .Sockets

Usa System.Net;

Usa System. Reflexionar;

Utilizar el sistema. Diagnóstico;

Utilizar el sistema. Texto. Expresión regular;

Espacio de nombres msgServer

{

Clase parcial pública frmServer: Formulario

{

Socket de socket privado;

Dirección IP privada myIP

Punto final IPEndPoint privado;

Punto int privado;

Socket de cliente de socket privado

Montaje privado culo=null

Sistema privado. IO . Stream stream = null

Sistema privado. Media . SoundPlayer pl

Txt de cadena privada

Bytes privados[] bs = nuevos bytes[512];

Servidor público frm()

{

inicializar componente();

ass = ensamblado. getexecutionassembly();

corriente = culo. GetManifestResourceStream("servidor de mensajes. msg. wav");

pl = nuevo sistema. Media.SoundPlayer(stream);

}

//Selección de fuente

private void btnFont_Click(remitente del objeto, EventArgs e)

{

diálogo de fuente font = nuevo diálogo de fuente();

Fuente. ShowEffects = true

Fuente. ShowColor = true

Fuente. MinSize = 12;

Fuente. Fuente = nueva Fuente(" cursiva _ GB 2312 ", 18, estilo de fuente. negrita

Fuente. color=color. azul;

if (Font. ShowDialog() == DialogResult. OK)

{

rtxtSend. Fuente = fuente. Fuente;

rtxtEnviar. ForeColor = fuente. Color;

}

}

//Comenzar a escuchar

vacío privado btnStart_Click(remitente del objeto, EventArgs e)

{

Sistema. Threading.Thread th1 = nuevo sistema. threading.Thread(para conectar);

th1.

start();

}

//Desconectar

Vacío privado ToConnect()

{

Probar

{

miIP = Dirección IP. Parse(txtIP.text.Trim()); //IP

punto = transformar. ToInt32(txtPoint.text.Trim()); //punto

endPoint = new IPEndPoint(myIP, point); //terminal

socket = nuevo socket(AddressFamily. Internet, Tipo de socket. Flujo, Tipo de protocolo TCP);

Socket. Vincular(punto final); //Vincular

socket. listening(3); //Hasta 3 personas pueden conectarse al mismo tiempo.

EstadoLbl. Text = "El servidor ya está funcionando...";

clientSocket = Socket. aceptar(); //Esperando aceptación

//Al conectar

if (clientSocket. Connected)

{

LblStatus. Texto = "La conexión se ha establecido.";

while(true)

{

Intentar

{

Socket de cliente. recibir(bs, bs. longitud, 0);

reproducción local();

rtxtMsg. AppendText(system. text . encoding . unicode . getstring(bs));

}

Catch {lblStatus. Text = "La conexión se ha perdido.";}

}

}

}

Capturar { txtIP. foco(); txtIP. seleccionar todo();MessageBox. Show("Error de IP o error de punto");}

}

//Detener monitoreo

Vacío privado btnStop_Click(Remitente del objeto, EventArgs e)

{

Prueba

{

outlet. Cerrar(3);

LblStatus. Text = "La supervisión se ha detenido.";

}

Captura

{

LblStatus. Text = "Aún no se ha establecido ninguna conexión.";

}

}

Vacío privado frmServer_KeyPress(Remitente del objeto, KeyPressEventArgs e)

{

}

Vacío privado frmServer_KeyDown(Remitente del objeto, KeyEventArgs e)

{

Si ((e . Amplificador de control ampe.KeyCode == Teclas. Intro) | (e . Alt amp; ampe.KeyCode == Teclas. s))

{

btnSend. realizar clic(); //Haga clic para enviar.

}

}

//Enviar mensaje

private void btnSend_Click(objeto remitente, EventArgs e)

{

if(Envío RTX.

Text.Trim() == " ")

Return;

else if(RTX send.Text.Trim().ToLower() == "clear()")

{

rtxtMsg. clear();

rtxtEnviar. Texto =

Regresar;

}

si no (Regex.is coincide(RTX send.Text.Trim().ToLower(),@"^ [zoom() [\d] [)]$”))

{

cadena str = rtxtSend. texto . para bajar();

int tamaño = Convertir. ToInt32(String. Substring. LastIndexOf('(') 1,

str. IndexOf(')') - str. LastIndexOf('(')-1)); Mensaje Rtxt. Fuente = nueva fuente ("宋体"), tamaño, estilo de fuente. Negrita);

Regresar;

}

si no (Regex.is coincide(RTX send.Text.Trim().ToLower(), @ " ^[abajo() [\d] [)]$"))

{

cadena str = rtxtSend. texto . para bajar();

Tamaño de cadena = str. subcadena. LastIndexOf('(') 1, cadena. IndexOf(')') - cadena. LastIndexOf('(')-1);

If (Convert.ToInt32(size)>rtxtMsg.TextLength)

Return;

}

p>

si no (Regex.is match(RTX send.Text.Trim().ToLower(),@"^[up(] [\d] [)]$"))

{

cadena str = rtxtSend. texto . para bajar();

Tamaño de cadena = str. subcadena. LastIndexOf('(') 1, cadena. IndexOf(')') - cadena. LastIndexOf('(')-1);

}

else if(RTX send.Text.Trim().ToLower() == "exit(0)")

{

Esto. cerrar();

regresar;

}

intentar

{

byte[] bs = nuevo Byte[512];

String user = null

If (txtUser. Text.Trim() == "Ingresa tu nombre aquí" || txtUser.

Text.Trim() == " ")

{

Usuario = " I

bs = codificación . unicode . getbytes(cadena . formato(" Decir : ({0}) \ r \ n {1} \ r \ n ", datetime.now.tostring(), envío RTX . text . trim());

}

Otro

{

bs = codificación . unicode . getbytes(string . format(" { 0 } significa: ({1}) \ r \ n {2} \ r \ n ", txtuser.text.trim(), datetime.now.tostring(), rtting.

usuario = txtUser.text.Trim();

}

p>

Socket de cliente. Enviar(bs, bs. longitud, 0); //Enviar

Txt = String. \ n {2} \ r \ n ", usuario, datetime.now.tostring(), RTX enviar . text . trim());

int tempLen = rtxtMsg. text. length;

rtxtMsg.AppendText(txt);

rtxtMsg.Selection(tempLen, txt.Length);

RtxtMsg = nueva fuente("ì", 10

rtxtMsg.SelectionColor=red;

rtxtSend. ("¡No se ha establecido conexión, no se pueden enviar datos!");}

}

//Cerrar el socket

Vacío privado frmServer_FormClosing(remitente del objeto, FormClosingEventArgs e)

{

Probar

{

//Cerrar la conexión

Salida cerrada(3.);

}

catch(excepción){ }

Finalmente

{

foreach(proceso p en curso. GetProcesses())

{

if (p.ProcessName == Aplicación. Nombre del producto)

Página (abreviatura de página) kill(); p>

}

}

}

Vacío privado frmServer_Load(Remitente del objeto, EventArgs e)

{< / p>

foreach(el proceso p está en progreso. GetProcesses())

{

if(p . nombre del proceso == aplicación . nombre del producto)//ha sido comenzó.

{

Si (p.Id!= process.getcurrentprocess().id) // no es el proceso actual.

{

Página (abreviatura de página) kill()

}

}

}

}

Casilla de verificación de anulación privada 1_CheckedChanged(Remitente del objeto, EventArgs e)

{

Esto. Más alto = checkBox1. Marcado;

}

}

}

Cliente:

Usando el sistema;

Usa el sistema. recolectar. Genérico;

Uso del sistema. Modelo de componentes;

Utilizar el sistema. Datos;

Utilizar el sistema. Dibujo;

Usa el sistema. Texto;

Usa el sistema. Windows Forms

Usa System.Net;

Usa System. Red .Sockets

Usa el sistema. Diagnóstico;

Utilizar el sistema. Text.Expresión regular;

Espacio de nombres smgClient

{

Clase parcial pública frmClient: Formulario

{

dirección IP privada ip; //ip

punto final privado; //punto

socket privado; //socket

Sistema privado. IO . Stream stream = null

Sistema privado. Reflexión . Asamblea culo = null

Sistema privado. Media . SoundPlayer pl = null

Txt de cadena privada

Bytes privados[] bs = nuevos Bytes[512];

Cliente público()

{

inicializar componente();

ass = system. reflexión. ensamblaje. getexecutionassembly();

flujo = culo. GetManifestResourceStream(" Cliente SMG . msg . wav ");

pl = nuevo sistema. Media.SoundPlayer(stream);

}

//Solicitar conexión

Vacío privado btnRequestConnect_Click(Remitente del objeto, EventArgs e)

{

Sistema. Threading.Thread th = nuevo sistema. Threading.Thread(this.para conectar);

th. start();

}

//Conectar al servidor

Vacío privado ToConnect()

{

Pruebe

{

IP = Dirección IP. Parse(txtIP. text. Trim());

int punto = ConvertToInt32(txtPoint. text. Trim());

punto final = nuevo IPEndPoint(IP, punto);

//Crear socket

socket = nuevo socket (AddressFamily. Internet, SocketType. Stream, Protocol Type. TCP

//Create Connect

salida.

Conexión (punto final);

//Conexión exitosa

LblStatus. Text = "Conexión exitosa.";

while(true)

{

Socket. recibir(bs, bs. longitud, 0);

reproducción local();

rtxtMsg. AppendText(system. text . encoding . unicode . getstring(bs)

}

}

catch (FormatException)

{ Cuadro de mensaje. Show("Error de IP o error de punto");}

catch (ArgumentNullException)

{ MessageBox. Show("Error de IP o error de punto");}

Catch (Excepción)

{

LblStatus. Text = "Error de conexión, motivo: el servidor se ha detenido.";

}

}

//Font

private void btnFont_Click (Remitente del objeto, EventArgs e)

{

fuente de diálogo de fuente = nueva fuente de diálogo();

Fuente. ShowEffects = true

Fuente. ShowColor = true

Fuente. MinSize = 12;

Fuente. Fuente = nueva fuente(" cursiva _ GB 2312 ", 18, estilo de fuente. negrita

Fuente. color=color. azul;

if (Font. ShowDialog() == DialogResult. OK)

{

rtxtSend. Fuente = fuente. Fuente;

rtxtEnviar. ForeColor = fuente. Color;

}

}

//Cerrar la conexión

private void btnCloseConnect _ Click (remitente del objeto, parámetro de evento e)

{

Prueba

{

outlet. close();

LblEstado. Text = "La conexión se ha cerrado.";

}

Captura

{

LblStatus. Text = "Aún no se ha establecido ninguna conexión.";

}

}

//Enviar mensaje

privado void btnSend_Click( objeto Remitente, EventArgs e)

{

if(RTX send.Text.Trim() == " ")

Return;

else if(RTX send.Text.Trim().ToLower() == "clear()")

{

rtxtMsg. clear();

rtxtEnviar. Texto =

Regresar;

}

si no (Regex.is coincide (RTX send.Text.Trim().

ToLower(),@"^[zoom(] [\d] [)]$"))

{

cadena str = rtxtSend. texto . para bajar();

int tamaño = Convertir. ToInt32(String. Substring. LastIndexOf('(') 1,

str. IndexOf(')') - str. LastIndexOf('(')-1)); Mensaje Rtxt. Fuente = nueva fuente ("宋体"), tamaño, estilo de fuente. Negrita);

Regresar;

}

si no (Regex.is coincide(RTX send.Text.Trim().ToLower(), @ " ^[abajo() [\d] [)]$"))

{

cadena str = rtxtSend. texto . para bajar();

Tamaño de cadena = str. subcadena. LastIndexOf('(') 1, cadena. IndexOf(')') - cadena. LastIndexOf('(')-1);

If (Convert.ToInt32(size)>rtxtMsg.TextLength)

Return;

}

p>

si no (Regex.is match(RTX send.Text.Trim().ToLower(),@"^[up(] [\d] [)]$"))

{

cadena str = rtxtSend. texto . para bajar();

Tamaño de cadena = str. subcadena. LastIndexOf('(') 1, cadena. IndexOf(')') - cadena. LastIndexOf('(')-1);

}

else if(RTX send.Text.Trim().ToLower() == "exit(0)")

{

Esto. cerrar();

regresar;

}

intentar

{

byte[] bs = nuevo Byte[512];

String user = null

If (txtUser.Text.Trim() == "Ingrese su nombre aquí" || txtUser.Text. Trim() = = " ")

{

Usuario = " I

bs = codificación . unicode . getbytes(string . format("La otra parte dijo: ({ 0}) \ r \ n {1} \ r \ n ", datetime.now.tostring(), envío RTX . text . trim());

}

Otro

{

bs = codificación . unicode . getbytes(cadena . formato(" { 0 } significa: ({1}) \ r \ n {2} \ r \ n " , txtuser.text.trim(), datetime.now.tostring(), rtting.

usuario = txtUser.

texto . Recortar();

}

Socket. enviar(bs, bs. longitud, 0); //enviar

Txt = cadena. Format("{0} significa: ({1}) \ r \ n {2} \ r \ n ", usuario, datetime.now.tostring(), RTX enviar . text . trim());

int tempLen = rtxtMsg. texto. Longitud;

rtxtMsg. AppendText(txt);

rtxtMsg. Seleccionar(tempLen, txt. length);

RtxtMsg. SelectionFont = newFont("ì", 10);

rtxtMsg. ColorSelección = color. Rojo;

rtxtEnviar. clear();

}

catch(excepción ex)

{MessageBox. Show("¡La conexión no se ha establecido! ¡No se pueden enviar datos!" ex. mensaje);}

}

//Evite abrir varios

privados void frmClient_Load( Remitente del objeto, EventArgs e)

{

foreach(el proceso p está en progreso. GetProcesses())

{

if( p . nombre del proceso == aplicación . nombre del producto)//Hay un proceso.

{

Si (p.Id!= process.getcurrentprocess().id) // no es el proceso actual.

{

Página (abreviatura de página) kill();

}

}

}

}

Vacío privado frmClient_FormClosing(Remitente del objeto, FormClosingEventArgs e)

{

Probar

{< / p>

Zócalo. close();

}

catch(excepción){ }

Finalmente

{

foreach( El proceso p está en curso GetProcesses())

{

if (p.ProcessName == Aplicación. Nombre del producto)

Página (abreviatura de página) kill ();

}

}

}

private void frmClient_KeyDown(objeto remitente, KeyEventArgs e)

{

If ((e . Control amp ampe.KeyCode == Keys. Enter) | | (e . Alt amp; ampe.KeyCode == Keys. s))

{

btnEnviar. realizar clic();

}

}

Casilla de verificación de anulación privada 1_CheckedChanged(Remitente del objeto, EventArgs e)

{

Esto. Más alto = checkBox1. Marcado;

}

}

}