Código fuente de socket concurrente c
//= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
Utilizar el sistema;
p>Utilice 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){ 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 conectarse";
This.button1.
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 system.drawing.size(296, 176);
este cuadro de grupo 3 . tabindex = 5
este cuadro de grupo 3 ;
this.groupBox3.Text = "Enviar mensaje";
this.richTextBox2.Dock = System. windows.forms.estilo de muelle.fill;
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. Botón 2. Haga clic en +=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();
( (sistema.
modelo de componente. Admito la inicialización (este panel de barra de estado 2)). end init();
Esto. ResumeLayout(false);
}
[Subproceso estático]
Tubería principal vacía estática()
{
Aplicar. run(new form 1());
}
Botón de anulación privada1_Click(Remitente del objeto, system. EventArgs e)
{
Pruebe {
IPEndPoint = new IPEndPoint(dirección IP.Parse(textBox1.Text.Trim()), int.Parse(textBox2.text.Trim()));}
Captura{
statusBar1. Panel[1]. Text= "¡Ingrese un valor válido!";
Return;
}
Thread Thread = new Thread(new ThreadStart(accp)); p> p>
Hilo. start();
}
private void accp() {
prueba {
localsocket = new socket(localsocket. Connect( ipendpoint);}
Catch {
statusBar1.Panel[1]. Text="¡Host no encontrado!";
Regresar;
}statusBar1.Text="Conectado al host->"+ipendpoint.
Thread Thread = new Thread(getmsg) );
Thread.start();
}
Private void getmsg(){
while(true){
p>byte[]búfer = nuevo byte[128];
Socket local.Receive(buffer);
AppendTextBox1.System.text.encoding.bigendianuicode.getstring(buffer));
}
}
Botón de anulación privado2_Click(Remitente del objeto, System. EventArgs e) {
búfer = codificación de texto del sistema. getbytes (cuadro de texto enriquecido 2. texto. Recorte). ());
localSocket(búfer
p>}
}
}
/ /= = = = = = = = = = = = = = = Servidor = = = = = = = = = = = = = = = = = = = = = = = = = = = =
Usar el sistema;
Usar el sistema;
Usar System.Collection;
Usar System.Component Model;
Usar. System.Forms
Usar System.Net;
Usar System.Net.Sockets
Usar System.
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 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) {
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. Haga clic en += nuevo sistema.
this.label1. ,32);
this.label1.
this.label1. tamaño = nuevo sistema(56, 23); /p>
this.label1. >
this.label1.TextAlign = Sistema.alineación de contenido.centro derecho;
this.textBox1.DrawingPoint(64,32);
this.textBox1. nombre = " cuadro de texto 1 ";
este.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 = "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.forms.estilo de muelle.fill;
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. Botón 2. Haga clic en +=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 _ 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> 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()
{ p>
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 privado2_Click(objeto enviado) Parte, System. EventArgs e)
{
byte[] buffer=System. texto . codificación . bigendianuicode . getbytes(DateTime.Now+"\n"+richTextBox2. text . Trim());
Socket remoto. Enviar(búfer);
}
}
}