Red de conocimiento informático - Computadora portátil - Ejemplos de programación de sockets en lenguaje C

Ejemplos de programación de sockets en lenguaje C

Bajo VS2003:

//= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

Usa el sistema;

p>

Usa el sistema. Dibujo;

Usa el sistema. Colección;

Usa el sistema. Modelo de componentes;

Utilizar el sistema. Windows Forms

Usa el sistema. Datos;

Usar System.Net;

Usar sistema. Red .Sockets

Usa el sistema. Threading;

Espacio de nombres S_c

{

Clase pública Form1: System. window.form.form

{

IPEndPoint privado ipendpoint

Socket local de socket privado

Sistema privado. windows .forms botón botón 1;

Sistema privado. windows .formularios etiqueta etiqueta 1;

Sistema privado. windows .formularios .cuadro de texto cuadro de texto 1;

Sistema privado. Windows .Forms.Label label2

Sistema privado. Windows .Forms.TextBox textBox2

Sistema privado. windows .formularios cuadro de grupo cuadro de grupo 1;

Sistema privado. windows .formularios cuadro de grupo cuadro de grupo 2;

Sistema privado. windows .forms .richtextbox richtextbox 1;

Sistema privado. windows .formularios cuadro de grupo cuadro de grupo 3;

Sistema privado. windows .forms .richtextbox richtextbox 2;

Sistema privado. Windows .Forms.Botón botón2

Sistema privado. Windows .Forms.Botón botón3

Sistema privado. windows .forms barra de estado barra de estado 1;

Sistema privado. windows .forms barra de estado panel barra de estado 1;

Sistema privado. windows .forms barra de estado panel barra de estado 2;

Sistema privado.

ComponentModel.Container componente = null

Formulario público 1()

{

inicializar componente();

}

Anulación protegida void Dispose( bool disposing)

{

if (eliminación){

if (componente! = nulo){

Componente. disponer();

}

}

Base. Dispose(dispose);

}

Private void InitializeComponent()

{

this.button1 = Nuevo sistema. windows .forms .boton();

this.label1 =Nuevo sistema. windows.forms.etiqueta();

this.textBox1 =Nuevo sistema. windows.forms.textbox();

this.label2 =Nuevo sistema. windows .forms .etiqueta();

this.textBox2 =Nuevo sistema. windows.forms.textbox();

this.groupBox1 = Nuevo sistema. windows.forms.grupobox();

this.groupBox2 = nuevo sistema. windows .forms .grupo box();

this.richTextBox1 = Nuevo sistema. windows.forms.richtextbox();

this.groupBox3 = nuevo sistema. windows .forms .grupo box();

this.richTextBox2 = Nuevo sistema. windows.forms.richtextbox();

this.button2 = Nuevo sistema. windows .forms .boton();

this.button3 = Nuevo sistema. windows.forms.boton();

this.statusBar1 = Nuevo sistema. windows.forms.barra de estado();

this.statusBarPanel1 = Nuevo sistema. windows .forms .panel de la barra de estado();

this.statusBarPanel2 = Nuevo sistema. formularios de windows. panel de barra de estado();

this.groupBox1. suspender diseño();

este cuadro de grupo 2 . suspender diseño();

este cuadro de grupo 3 . Modelo de componente System. Admito inicializar (este panel de barra de estado 1).

modelo de componente. Admito la inicialización (este panel de barra de estado 2)). comenzar init();

Esto. suspender diseño();

this.button1. ubicación = nuevo sistema. Punto de dibujo(208,32);

este.botón1. nombre = " botón 1 ";

este.botón1. tamaño = nuevo sistema. dibujo. Tamaño(64, 56);

este.botón1. TabIndex = 0;

este.botón1. Text = "Comenzar a conectarse";

this.button1. Haga clic en =Nuevo sistema. EventHandler(este . botón 1 _ Clic);

this.label1. ubicación = nuevo sistema. Punto de trama(8,32);

this.label1. nombre = " etiqueta 1 ";

this.label1. tamaño = nuevo sistema. dibujo. tamaño(56, 23);

this.label1. TabIndex = 1;

this.label1. text = "HostIP:";

this.label1. TextAlign = Sistema. dibujo . alineación del contenido .centro derecha;

this.textBox1. ubicación = nuevo sistema. Punto de dibujo(64,32);

this.textBox1. nombre = " cuadro de texto 1 ";

this.textBox1. tamaño = nuevo sistema. Dibujo.tamaño(128,21);

este.textBox1. TabIndex = 2;

este.textBox1. text = " 127 . 0 . 0 . 1 " ;

this.label2.Location =Nuevo sistema. plotpoint(8, 64);

this .etiqueta 2 . nombre = " etiqueta 2 ";

this.label2.Size = nuevo sistema. dibujo. Tamaño (56, 23);

esta etiqueta 2 . tabindex = 1;

esta etiqueta 2 . .label2.TextAlign = Sistema. dibujo. alineación del contenido. centro derecha;

this.textBox2.Location =Nuevo sistema. Plot Point(64, 64);

this . textbox 2 . nombre = " textbox 2 ";

this.textBox2.Size = nuevo sistema. Drawing.size(128,21);

este cuadro de texto 2 . tabindex = 2;

este cuadro de texto 2 . .groupBox1.

controles . Add(this. etiqueta 1);

this.groupBox1. controles . Add(this. etiqueta 2);

this.groupBox1. controles . Add(this . textbox 2);

this.groupBox1. controles . Add(this . textbox 1);

this.groupBox1. controles . Agregar(este . botón 1);

this.groupBox1. ubicación = nuevo sistema. dibujo.point(24,8);

this.groupBox1. nombre = " cuadro de grupo 1 ";

this.groupBox1. tamaño = nuevo sistema. Dibujo.tamaño(296,112);

this.groupBox1. TabIndex = 3;

this.groupBox1. TabStop = false

this.groupBox1. Text = " Conectar

este . cuadro de grupo 2 . controles . agregar(este . cuadro de texto enriquecido 1);

this.groupBox2.Location = new system.drawing.point(24, 128);

este. cuadro de grupo 2. nombre = "cuadro de grupo 2";

this.groupBox2.Size = nuevo sistema. /p>

este cuadro de grupo 2 . tabindex = 4;

este cuadro de grupo 2 .

this.groupBox2.Text = "Recibir mensaje" ;

this.richTextBox1.Dock=system.windows.forms.dock-style.fill;

this.richTextBox1.position=new.dot(3,17); p>

this.richTextBox1.name = "cuadro de texto enriquecido 1";

this.richTextBox1.size = nuevo sistema.size(290, 156);

this.richTextBox1 .TabIndex = 0;

this.richTextBox1.Text =

este . cuadro de grupo 3 . add(this . cuadro de texto enriquecido 2); .groupBox3.Location = nuevo system.draw.point(24,312);

este .cuadro de grupo 3. nombre = "cuadro de grupo 3";

este .groupBox3.Size=nuevo sistema.

Drawing.size(296,176);

este cuadro de grupo 3. tabindex = 5;

este cuadro de grupo 3. groupBox3.Text = "Enviar mensaje";

this.richTextBox2.Dock = System. windows .formularios .relleno de estilo .

this.richTextBox2.Location = nuevo sistema. dibujo.point(3,17);

este .rich textbox 2 nombre = "rich textbox 2 ";

this.richTextBox2.Size = nuevo sistema. dibujo.size(290,156);

este cuadro de texto enriquecido 2 . tabindex = 0;

este cuadro de texto enriquecido 2 . .button2.Location=Nuevo sistema. plotpoint(69, 496);

este botón 2 = " botón 2 ";

this.button2.Size = nuevo sistema. dibujo. size(64, 23);

este botón 2. tabindex = 6;

este botón 2. button2.Click=Nuevo sistema. EventHandler(este botón 2_Click);

this.button3.Location = Nuevo sistema. DrawPoint(208, 496);

este. botón 3 . nombre = " botón 3 ";

this.button3.Size = nuevo sistema. dibujo. size(64, 23);

este botón 3. tabindex = 6;

este botón 3. barra de estado1. ubicación = nuevo sistema. Punto de dibujo(0,535);

this.statusBar1. nombre = " barra de estado 1 ";

this.statusBar1. Panels.AddRange(nuevo sistema. windows . formularios . panel de la barra de estado[]{ este . panel de la barra de estado 1, este . panel de la barra de estado 2 });

this.statusBar1. ShowPanels = true

this.statusBar1. tamaño = nuevo sistema. dibujo. tamaño(344, 22);

this.statusBar1. TabIndex = 7;

this.statusBarPanel1. Text = "Estado actual:";

este estado barpanel 2 ancho = 350;

Esto.

AutoScaleBaseSize = nuevo sistema. Tamaño del dibujo (6, 14);

Este. ClientSize = nuevo sistema. dibujo. Tamaño(344,557);

Esto. controles . Agregar(esta . barra de estado 1);

Esto. controles . Agregar(este . botón 2);

Este. controles . Agregar(este . cuadro de grupo 2);

Esto. controles . Agregar(este . cuadro de grupo 1);

Esto. controles . Agregar(este . cuadro de grupo 3);

Esto. controles . Agregar(este . botón 3);

Este. nombre = " formulario 1 ";

Este. Text = " S _ c

this.groupBox1. ResumeLayout(false);

este . cuadro de grupo 2. diseño de currículum (false);

this . cuadro de grupo 3. reanudar diseño (falso);

((Sistema.modelo de componente. Admito inicializar)(este.panel de barra de estado 1).end init();

( (modelo system.component. Admito inicializar) (este panel de barra de estado 2)).end init();

This.ResumeLayout(false);

}

[Subproceso estático]

Tubería principal vacía estática()

{

Aplicar ejecución (nueva forma 1());

}

Botón de anulación privada1_Click(Remitente del objeto, System. EventArgs e)

{

Pruebe {

IPEndPoint = nuevo IPEndPoint(dirección IP.Parse(textBox1.Text.Trim()), int.Parse(textBox2.text.Trim()));}

Catch {

statusBar1.Panel [1].Text= "¡Ingrese un valor válido!";

Return;

Thread Thread = new Thread(new ThreadStart (accp));

Thread.start();

}

Accp nulo privado(){

Pruebe {

p>

localsocket = nuevo socket (localsocket.Connect(ipendpoint);}

Catch{

statusBar1.Panel[1].Text= "¡Host no encontrado!"

Regresar;

} statusBar1. Panel[1]. Texto = "Conectado al host ->" ipendpoint.

ToString();

Subproceso = new Thread(new ThreadStart(getmsg));

Subproceso. start();

}

Vacío privado getmsg(){

while(true){

byte[]buffer = nuevo Bytes[128];

Socket local. Recibir(búfer);

richTextBox1. AppendText("\n" System. text . encoding . bigendianuicode . getstring(buffer));

}

}

Botón de anulación privada2_Click(remitente del objeto, System.EventArgs e){

Buffer = System. texto. codificación. bigendianuicode. getbytes(cuadro de texto enriquecido 2. texto. Trim());

Socket local. Enviar(búfer);

}

}

}

//= = = = = = = = = = = = = = = = Servidor = = = = = = = = = = = = = = = = = = = =

Utiliza el sistema

El sistema. Dibujo;

Usa el sistema. Colección;

Usa el sistema. Modelo de componentes;

Utilizar el sistema. Windows Forms

Usa el sistema. Datos;

Usar System.Net;

Usar sistema. Red .Sockets

Usa el sistema. Threading;

Espacio de nombres S_s

{Clase pública Form1: System. window.form.form

{

IPEndPoint privado ipendpoint

Socket local de socket privado

Socket remoto de socket privado

Sistema privado. windows .forms botón botón 1;

Sistema privado. windows .formularios etiqueta etiqueta 1;

Sistema privado. windows .formularios .cuadro de texto cuadro de texto 1;

Sistema privado. Windows .Forms.Label label2

Sistema privado. Windows .Forms.TextBox textBox2

Sistema privado. windows .formularios cuadro de grupo cuadro de grupo 1;

Sistema privado. windows .formularios cuadro de grupo cuadro de grupo 2;

Sistema privado. windows .forms .richtextbox richtextbox 1;

Sistema privado. windows .formularios cuadro de grupo cuadro de grupo 3;

Sistema privado. windows .forms .richtextbox richtextbox 2;

Sistema privado.

Windows .Forms.Botón botón2

Sistema privado. Windows .Forms.Botón botón3

Sistema privado. windows .forms barra de estado barra de estado 1;

Sistema privado. windows .forms barra de estado panel barra de estado 1;

Sistema privado. windows .forms panel de barra de estado panel de barra de estado 2;

Sistema privado. ComponentModel.Container componente = null

Formulario público 1()

{

inicializar componente();

}

Anulación protegida void Dispose( bool disposing)

{

if (eliminación) {

if (componente! = nulo) {

p>

Componente. disponer();

}

}

Base. Dispose(dispose);

}

Private void InitializeComponent()

{

this.button1 = Nuevo sistema. windows .forms .boton();

this.label1 =Nuevo sistema. windows.forms.etiqueta();

this.textBox1 =Nuevo sistema. windows.forms.textbox();

this.label2 =Nuevo sistema. windows .forms .etiqueta();

this.textBox2 =Nuevo sistema. windows.forms.textbox();

this.groupBox1 = Nuevo sistema. windows.forms.grupobox();

this.groupBox2 = nuevo sistema. windows .forms .grupo box();

this.richTextBox1 = Nuevo sistema. windows.forms.richtextbox();

this.groupBox3 = nuevo sistema. windows .forms .grupo box();

this.richTextBox2 = Nuevo sistema. windows.forms.richtextbox();

this.button2 = Nuevo sistema. windows.forms.boton();

this.button3 = Nuevo sistema. windows.forms.boton();

this.statusBar1 = Nuevo sistema. windows.forms.barra de estado();

this.statusBarPanel1 = Nuevo sistema. windows .forms .panel de la barra de estado();

this.statusBarPanel2 = Nuevo sistema.

formularios de windows. panel de barra de estado();

this.groupBox1. suspender diseño();

este cuadro de grupo 2 . suspender diseño();

este cuadro de grupo 3 . Modelo de componente del sistema. Admito la inicialización (este panel de la barra de estado 1). . comenzar init();

Este. suspender diseño();

This.button1. this.button1. nombre = "botón 1";

this.button1. >

This.button1. Text = "Comenzar a escuchar";

This.button1. Click = nuevo sistema.

this.label1. ,32);

esta.etiqueta1.

esta.etiqueta1. =NewSystem.Drawings.size(56,23);

esta.etiqueta1.

this.label1.text = "HostIP:";

this.TextAlign = Dibujo del sistema.alineación del contenido.centro derecho;

this.textBox1. DrawingPoint(64,32);

this.textBox1. nombre = "cuadro de texto 1";

this.textBox1 tamaño = nuevo sistema.tamaño(128, 21); p>

este.textBox1 ;

este.textBox1. text = " 127 . 0 . 0 . 1 " ;

this.label2.Location =Nuevo sistema. plotpoint(8, 64);

this .etiqueta 2 . nombre = " etiqueta 2 ";

this.label2.Size = nuevo sistema. dibujo. Tamaño (56, 23);

esta etiqueta 2 . tabindex = 1;

esta etiqueta 2 . .label2.TextAlign = Sistema.

dibujo. alineación del contenido. centro derecha;

this.textBox2.Location =Nuevo sistema. Plot Point(64, 64);

this . textbox 2 . nombre = " textbox 2 ";

this.textBox2.Size = nuevo sistema. Drawing.size(128,21);

este cuadro de texto 2 . tabindex = 2;

este cuadro de texto 2 . .groupBox1. controles . Add(this. etiqueta 1);

this.groupBox1. controles . Add(this . etiqueta 2);

this.groupBox1. controles . Add(this . textbox 2);

this.groupBox1. controles . Add(this . textbox 1);

this.groupBox1. controles . Agregar(este . botón 1);

this.groupBox1. ubicación = nuevo sistema. dibujo.point(24,8);

this.groupBox1. nombre = " cuadro de grupo 1 ";

this.groupBox1. tamaño = nuevo sistema. Dibujo.tamaño(296,112);

this.groupBox1. TabIndex = 3;

this.groupBox1. TabStop = false

this.groupBox1. Text = "Escuchar";

este . cuadro de grupo 2 . add(este . cuadro de texto enriquecido 1); dibujo.point(24,128);

este .group box 2 . = " grupo box 2 ";

this.groupBox2.Size = nuevo sistema. Drawing.size(296,176);

este cuadro de grupo 2 . tabindex = 4;

este cuadro de grupo 2 . groupBox2.Text = "Recibir mensaje";

this.richTextBox1. Muelle = sistema. windows .formularios .relleno de estilo;

this.richTextBox1. ubicación = nuevo sistema. Drawing.Point(3,17);

this.richTextBox1. nombre = "cuadro de texto enriquecido 1";

this.richTextBox1. tamaño = nuevo sistema. Dibujo.tamaño(290,156);

este.richTextBox1. TabIndex = 0;

este.richTextBox1.

Text =

este . cuadro de grupo 3 . add(this . rich textbox 2);

this.groupBox3.Location =Nuevo sistema. plot.point(24,312);

este .group box 3 . = " grupo box 3 ";

this.groupBox3.Size = nuevo sistema. Drawing.size(296,176);

este cuadro de grupo 3. tabindex = 5;

este cuadro de grupo 3. groupBox3.Text = "Enviar mensaje";

this.richTextBox2.Dock = System. windows .formularios .relleno de estilo .

this.richTextBox2.Location = nuevo sistema. dibujo.point(3,17);

este .rich textbox 2 nombre = "rich textbox 2 ";

this.richTextBox2.Size = nuevo sistema. dibujo.size(290,156);

este cuadro de texto enriquecido 2 . tabindex = 0;

este cuadro de texto enriquecido 2 . .button2.Location=Nuevo sistema. plotpoint(69, 496);

este botón 2 = " botón 2 ";

this.button2.Size = nuevo sistema. dibujo. size(64, 23);

este botón 2. tabindex = 6;

este botón 2. button2.Click=Nuevo sistema. EventHandler(este botón 2_Click);

this.button3.Location = Nuevo sistema. DrawPoint(208, 496);

este. botón 3 . nombre = " botón 3 ";

this.button3.Size = nuevo sistema. dibujo. size(64, 23);

este botón 3. tabindex = 6;

este botón 3. barra de estado1. ubicación = nuevo sistema. Punto de dibujo(0,535);

this.statusBar1. nombre = " barra de estado 1 ";

this.statusBar1. Panels.AddRange(nuevo sistema.

windows .forms panel de barra de estado[]{ este . panel de barra de estado 1, este panel de barra de estado 2 });

this.statusBar1. ShowPanels = true

this.statusBar1. tamaño = nuevo sistema. dibujo. tamaño(344, 22);

this.statusBar1. TabIndex = 7;

this.statusBarPanel1. Text = "Estado actual:";

este estado barpanel 2 ancho = 350;

Esto. AutoScaleBaseSize = nuevo sistema. Tamaño del dibujo (6, 14);

Este. ClientSize = nuevo sistema. dibujo. Tamaño(344,557);

Esto. controles . Agregar(esta . barra de estado 1);

Esto. controles . Agregar(este . botón 2);

Este. controles . Agregar(este . cuadro de grupo 2);

Esto. controles . Agregar(este . cuadro de grupo 1);

Esto. controles . Agregar(este . cuadro de grupo 3);

Esto. controles . Agregar(este . botón 3);

Este. nombre = " formulario 1 ";

Este. Text = " S _ s

this.groupBox1. ResumeLayout(false);

este . cuadro de grupo 2. diseño de currículum (false);

this . cuadro de grupo 3. reanudar diseño (falso);

((Sistema.modelo de componente. Admito inicializar)(este.panel de barra de estado 1).end init();

( (modelo system.component. Admito inicializar) (este panel de barra de estado 2)).end init();

This.ResumeLayout(false);

}

[Subproceso estático]

Tubería principal vacía estática()

{

Aplicar ejecución (nueva forma 1());

}

Botón de anulación privada1_Click(Remitente del objeto, System. EventArgs e)

{

Probar

{

IPEndPoint = nuevo IPEndPoint(dirección IP.Parse(textBox1.Text.Trim()), int.Parse(textBox2.text.Trim()));

}

Capturar

{

statusBar1.

Text= "¡Ingrese un valor válido!";

Return;

}

Thread Thread = new Thread(new ThreadStart(accp)); p>

Hilo. start();

}

Accp nulo privado()

{

mientras (verdadero)

{

Pruebe

{

localsocket = new Socket(AddressFamily. Internet, SocketType. Stream, ProtocolType. TCP);

Local enchufe. bind(ipendpoint);

Socket local. escucha(128);

}

Captura

{statusBar1. Panel[1]. Text= "Host no encontrado o escuchando iniciado!";

Return;

}

statusBar1. Panel[1]. Text="¡Escuchar ha comenzado!";

while(true)

{ remotesocket = socket local. Accept();

Subproceso = nuevo Subproceso(new ThreadStart(getmsg));

Subproceso. start();

}

}

}

Vacío privado getmsg()

{

while(true)

{

byte[]buffer = nuevo byte[128];

Socket remoto. Recibir(búfer);

richTextBox1. AppendText("\n" System. text . encoding . bigendianuicode . getstring(buffer));

}

}

Botón de anulación privada2_Click(remitente del objeto, System. EventArgs e)

{

byte[] buffer=System. text . codificación . bigendianuicode . getbytes(DateTime. Now "\n" richTextBox2. text . Trim());

Socket remoto. Enviar(búfer);

}

}

}