Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cómo utilizar Winsock para la transferencia remota de archivos en VB?

¿Cómo utilizar Winsock para la transferencia remota de archivos en VB?

Programación de red - sala de chat (el código es el siguiente)

Este programa se basa en la aplicación del control Winsock en el entorno de desarrollo VB, sigue el protocolo TCP/IP y utiliza el socket de la función de control para realizar la comunicación de datos entre computadoras remotas. Consta de servidor y cliente. El servidor se utiliza para conectar varios clientes. Puede contar la cantidad de personas que se han conectado al servidor y la cantidad de personas actualmente en línea en el servidor. También es responsable de enviar y recibir mensajes enviados por cada cliente para lograr una conexión real. comunicación de datos oportuna, precisa y sin errores entre múltiples clientes. Este programa puede conectarse a 1000 clientes, y si desea aumentar o disminuir la cantidad de clientes disponibles para la conexión, solo necesita realizar ligeros cambios en el límite superior de clientes en el programa fuente.

Cómo funciona

Servidor: declara un conjunto de matrices de control Winsock en tiempo de ejecución, crea solo el primer elemento de la matriz y comienza a escuchar desde el puerto 9999 (escuchar), cuando haya es Cuando el cliente se conecta al primer control Winsock y la conexión es exitosa, se activa el evento Winsock_ConnectRequest () y el número de puerto (Localport) se reduce en 1 unidad. En este momento, se utiliza el método Load Winsock (i). para crear el siguiente elemento de matriz de control de Winsock y dejar que comience a escuchar, continuar esperando a que se conecte el nuevo cliente, y así sucesivamente. Cuando la cantidad de conexiones alcanza el límite de clientes establecido, el servidor deja de crear nuevos elementos de matriz de control Winsock, deja de escuchar y deja de conectar clientes. Una vez que el servidor y el cliente se conectan correctamente, los datos se envían y reciben a través del evento DataArrival() de Winsock, los métodos SendData y GetData. En el servidor se utiliza un cuadro de texto con un atributo Bloqueado establecido en Verdadero para registrar todos los mensajes (registros de chat) enviados por los clientes.

Cliente: cree solo un control Winsock durante el tiempo de ejecución, especifique el puerto remoto de Winsock en orden descendente a partir de 9999 y conéctese al servidor remoto en secuencia. Una vez que la conexión sea exitosa, deje de especificar el puerto y comience a comunicarse. con el servidor.

Utilice un cuadro de texto con el atributo Bloqueado establecido en Verdadero para registrar todos los mensajes enviados por los clientes y utilice un cuadro de texto editable para ingresar los mensajes que los clientes desean enviar. Esto básicamente implementa la función de un chat. habitación. .

Código de programa

Servidor:

Opción explícita

Atenuar invitado como entero 'Contador de números de clientes en línea

Dim j As Integer 'Contador del número de clientes recibidos

Dim k As Integer 'Contador del número de mensajes enviados a clientes en línea

Dim t As Integer 'Número de mensajes enviados a clientes en línea cuando el servidor está cerrado Contador

Atenuar puerto como entero 'Contador de puerto

Atenuar mensaje como cadena 'Texto del mensaje enviado y recibido

Atenuar nuevo invitado como Entero 'Nueva conexión de cliente

Sub privado Form_Load()

Si App.PrevInstance Entonces MsgBox "¡Lo siento! Ya has creado un servidor^_^": Fin

j = 0

invitado = 0

puerto = 9999

Texto2 = Winsock1(0).LocalIP

Etiqueta3.Caption = "Número de personas en línea:" amp; guest

Label4.Caption = "Número de personas recibidas:" j

Winsock1(0).LocalPort = puerto 'El primero; el control en la matriz de control Winsock comienza a escuchar

Winsock1(0).Listen

End Sub

Private Sub Form_Unload(Cancel As Integer) 'Buffer al cerrar el servidor y envía una señal de desconexión

Cancelar = 1

t = 0

Timer2.Enabled = 1

End Sub

Private Sub Timer1_Timer()

En caso de error, reanudar siguiente 'Manejo de errores

Winsock1(k).SendData msg 'Enviar mensajes recibidos inmediatamente a todos los clientes

k = k 1

Si k gt;= j Entonces Timer1.Enabled = 0

End Sub

Private Sub Timer2_Timer() 'Enviar señal de desconexión al cliente

En caso de error Reanudar siguiente

msg = "closewinsock"

Winsock1(t).SendData msg

t = t 1

Si t gt ; j Then End

End Sub

Private Sub Timer3_Timer() 'Enviar mensaje de bienvenida a nuevos clientes

Activado Error Reanudar siguiente

Si k = newguest Entonces Salir Sub

Winsock1(k).SendData msg

k = k 1

Si k gt;= j Entonces Timer3.Enabled = 0

End Sub

Sub privado Winsock1_ConnectionRequest(Índice como entero, ByVal requestID como largo)

En caso de error, reanudar a continuación

Atenuar persona en línea como String

msg = ""

If Winsock1(Index).State lt;gt; sckClosed Then Winsock1(Index).Close 'Conectado correctamente

Winsock1( Index).Aceptar requestID

j = j 1 'Cuenta el número de personas recibidas

Si invitado 1 lt 10 Entonces

onlineperson = "currentonlineperson00" CStr; (invitado 1) msg ​​​​

ElseIf invitado 1 lt; 100 Then

onlineperson = "currentonlineperson0" CStr(invitado 1) msg ​​​​

End If

Winsock1(Index).SendData onlineperson amp; "Usted es el cliente" amp; CStr(j) "que ingresó a esta sala de chat^_^" Chr(13) Chr(10)

msg = onlineperson amp; "th" amp; CStr(j) amp "Los clientes ingresaron a esta sala de chat" Chr(13) Chr(10)

Text1 = Text1 "th" amp; ; CStr( j) amp; "Los clientes ingresaron a esta sala de chat" Chr(13) Chr(10)

k = 0

newguest = Index

Timer3 Habilitado = 1

Text1.SelStart = Len(Text1)

invitado = invitado 1 'Cuenta el número de personas en línea

Label3.Caption = "El. número de personas en línea:" amp; guest

Label4.Caption = "Número de personas recibidas:" amp; j

Cargar puerto Winsock1(j)

= puerto - 1

Winsock1(j).LocalPort = puerto

Winsock1(j).Listen

End Sub

Sub privado Winsock1_DataArrival(Índice como entero, ByVal bytesTotal mientras)

En caso de error, reanudar a continuación

Atenuar i como entero

Atenuar persona en línea como cadena

msg = ""

Winsock1(Index).GetData msg 'Enviar señal de desconexión

Si

msg = "closewinsock" Entonces

msg = ""

Winsock1(Index).Close

Si invitado - 1 lt 10 Entonces

onlineperson = "currentonlineperson00" CStr(invitado - 1)

ElseIf guest lt; 100 Then

onlineperson = "currentonlineperson0" CStr(invitado - 1)

Finalizar si

msg = "th" amp; CStr(Index 1) amp "Los clientes se han ido" Chr(13) Chr(10)

Text1 = Text1 msg < / p>

msg = onlineperson amp; "th" amp; CStr(Index 1) amp; "Un cliente se fue" Chr(13) Chr(10)

Text1.SelStart = Len( Text1 )

k = 0

Timer1.Enabled = 1

invitado = invitado - 1

Label3.Caption = "Número de personas en línea :" amp; guest

Label4.Caption = "Número de personas recogidas: " amp; j

Salir Sub

End If

msg = "El cliente de "CStr(Index 1)" dijo:" msg Chr(13) Chr(10)

Text1 = Text1 msg

Text1.SelStart = Len(Texto1 )

k = 0

Timer1.Enabled = 1

End Sub

Cliente:

Dim linkstate As Boolean 'Determina el estado de la conexión

Dim port As Integer 'Pruebe los puertos para conectarse en secuencia

Private Sub Cmdconnect_Click()

En caso de error Reanudar siguiente

Atenuar como cadena

Atenuar x como cadena

Atenuar y como entero

y = 0

Si Len(Text1) = 0 Then Exit Sub 'Determina si la dirección IP ingresada es legal

For i = 1 To Len(Text1)

If Mid(Text1, i , 1) lt;gt ; "." Entonces

t = t Mid(Text1, i, 1)

x = ""

Else

y = y 1

x = x Mid(Text1, i, 1)

t = ""

Fin si

Si Len (t) gt; 3 O x = ".

." O Left(Text1, 1) = "." O Right(Text1, 1) = "." Luego

MsgBox "Ingrese la dirección IP correcta^_^", vbOKOnly vbInformation, "Conectar ": Salir Sub

End If

Siguiente i

If y lt; gt; 3 Then MsgBox "Ingrese la dirección IP correcta ^_^", vbOKOnly vbInformation, "Conexión": Salir de Sub

Si Text1 es como "*.*.*.*" Entonces

Si Cmdconnect.Caption = "& Link" Luego 'Selección de usuario Conectar

Cmdconnect.Caption = "&Break"

Timer1.Enabled = 1

Text1.Enabled = 0

Else ' El usuario elige para interrumpir la conexión

Label4.Caption = "Número de personas en línea: 0"

Text2 = Text2 "Conexión interrumpida" Chr(13) Chr(10)

Text2.SelStart = Len(Text2)

Timer1.Enabled = 0

Text1.Enabled = 1

Text1.SetFocus

Cmdconnect .Caption = "Enlace"

Winsock1.SendData "closewinsock"

linkstate = False

puerto = 9999

Text3. Habilitado = Falso

cmdsend.Enabled = Falso

Finalizar si

Finalizar si

Fin Sub

Privado Sub cmdsend_Click()

En caso de error Reanudar Siguiente 'Enviar mensaje

Winsock1.SendData Text3

Text3 = ""

Text3.SetFocus

End Sub

Sub privado Form_Load()

linkstate = False

puerto = 9999

End Sub

Sub Form_Unload privado (Cancelar como entero)

En caso de error, reanudar a continuación

Winsock1.SendData "closewinsock" 'Envía una señal de desconexión al servidor

Cancelar = 1

Timer2.Enabled = 1

End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer) 'Prohibir a los usuarios ingresar IP ilegal direcciones

If KeyAscii lt 48 O

KeyAscii gt; 57 Entonces

Si KeyAscii lt;gt; 8 Y KeyAscii lt;gt; 46 Entonces KeyAscii = 0

Fin

End Sub

p>

Sub privado Text2_KeyPress(KeyAscii como entero)

Si Text3.Enabled = False entonces salga de Sub

Si KeyAscii = 13 luego llame a cmdsend_Click

Text3 = Text3 Chr(KeyAscii)

End Sub

Sub privado Text3_KeyPress(KeyAscii As Integer)

Si KeyAscii = 13, entonces llame a cmdsend_Click

End Sub

Private Sub Timer1_Timer() 'Intenta conectarte al servidor desde el puerto 9999 en secuencia

Si linkstate = True, entonces sal de Sub

Winsock1 .Close

Winsock1.Close

p>

Winsock1.RemoteHost = Text1.Text

Winsock1.RemotePort = puerto

Winsock1.Connect

port = port - 1

Si port lt; 9000 Entonces 'Establece el límite superior de puertos disponibles para la conexión

Timer1.Enabled = 0

Text1.Enabled = 1

Cmdconnect Caption = "Enlace"

puerto = 9999

MsgBox "No se puede conectar al servidor, verifique el estado de la conexión de red", vbOKOnly vbCritical, "Connection"

End If

End Sub

Private Sub Timer2_Timer() 'Buffer para enviar señal de desconexión

End

End Sub

p>

Private Sub Winsock1_Connect()

puerto = puerto 1

Timer1.Enabled = 0

linkstate = True

Text3.Enabled = 0

cmdsend.Enabled = 0

MsgBox "Conectado exitosamente", vbOKOnly vbInformation, "Conectado"

Text3.Enabled = 1

cmdsend.Enabled = 1

Text3.SetFocus

End Sub

Sub privado Winsock1_DataArrival(ByVal bytesTotal As Long)

Atenuar mensaje como cadena

Winso

ck1.GetData msg 'Recibe los datos del servidor y los procesa en consecuencia

If Left(CStr(msg), 19) = "currentonlineperson" Then

Label4.Caption = " Number de personas en línea: " & Str(Val(Mid(CStr(msg), 20, 3)))

msg = Right(CStr(msg), Len(CStr(msg)) - 22)

Finalizar si

Si CStr(msg) = "closewinsock" Entonces

Llamar a Cmdconnect_Click

Text2.SelStart = Len(Text2)

Salir de Sub

End If

Text2 = Text2 msg

Text2.SelStart = Len(Text2)

Fin Sub

Respuesta: Hai Biyangbo - Tongsheng Nivel 12-28 13:12

La evaluación ha sido cerrada Actualmente hay 1 evaluación personal

OK <. /p>

100 (1) No es bueno

0 (0)

Otras respuestas*** 3

asp

Respuesta: dageda - Xiucai Nivel 2 12-22 02:54

acción nula pública realizada (ActionEvent e)

{

int count, temp

p>

temp=ch.getSelectedIndex();

if(e.getSource()==btn1)

{

ch .select( --temp);

count=temp;

content.setText(String.valueOf(add1[temp] ope2[temp] add2[temp]) "=" ); /p>

radio1.setLabel(String.valueOf(respuesta[temp][0]));

radio2.setLabel(String.valueOf(respuesta[temp][1]) <); /p>

radio3.setLabel(String.valueOf(respuesta[temp][2]));

radio4.setLabel(String.valueOf(respuesta[temp][3]) <); /p>

if(count==0)

{

btn1.setEnabled(false);

}

btn2.setEnabled(verdadero);

txt1.setText("");

check1.setState(false);

correctLab.setVisible( falso);

}

if(e.getSource()==btn2)

{

ch.select( temp)

cuenta=t

emp;

content.setText(String.valueOf(add1[temp] ope2[temp] add2[temp]) "="

radio1.setLabel(String.valueOf(); respuesta[temp][0]));

radio2.setLabel(String.valueOf(respuesta[temp][1]));

radio3.setLabel(String.valueOf( respuesta[temp][2]));

radio4.setLabel(String.valueOf(respuesta[temp][3]));

if(count==9)

{

btn2.setEnabled(false);

}

btn1.setEnabled(true); txt1.setText("");

check1.setState(false);

correctLab.setVisible(false);

}

count=temp;

if(e.getSource()==txt1)

{

Nombre de cadena=txt1.getText(); >

if(name.equals(radio1.getLabel()))

{

radio1.setState(true)

}

if(name.equals(radio2.getLabel()))

{

radio2.setState(true)

}

if(name.equals(radio3.getLabel()))

{

radio3.setState(true)

}

if(name.equals(radio4.getLabel()))

{

radio4.setState(true)

}

}

}

itemStateChanged public void(ItemEvent e)

{

int count, temp

if(e.getItemSelectable()==ch)

{

temp=ch.getSelectedIndex()

count=temp; /p>

content.setText(String.valueOf(add1[temp] ope2[temp] add2[temp]) "="

radio1.setLabel(String.valueOf(answer[temp]); ][0]));

radio2.setLabel(String.valueOf(answer[temp][1]));

radio3.setLabel(String.valueOf(answe).

r[temp][2]));

radio4.setLabel(String.valueOf(answer[temp][3]));

if(count==0)

{

btn1.setEnabled(false);

}

btn2.setEnabled(true); if(count==9)

{

btn2.setEnabled(false)

}

btn1.setEnabled(true)

txt1.setText("");

check1.setState(false);

correctLab.setVisible(false); >}

if(e.getItemSelectable()==radio1)

{

txt1.setText(radio1.getLabel());

}

if(e.getItemSelectable()==radio2)

{

txt1.setText(radio2.getLabel()); p>

p>

}

if(e.getItemSelectable()==radio3)

{

txt1.setText(radio3. getLabel());

}

if(e.getItemSelectable()==radio4)

{

txt1.setText( radio4.getLabel() );

}

if(e.getItemSelectable()==check1)

{

if( e.getStateChange() ==e.SELECTED)

{

correctLab.setVisible(true);

temp=ch.getSelectedIndex(); p>

correctLab.setText("La respuesta correcta es: " String.valueOf(correct[temp])

}

else if(e.getStateChange()); ==e.DESELECTED)

{

correctLab.setVisible(false

}

}

}

}

clase pública xhks120

{

public static void main(String args[])

{

Mi marco fr=new Mi marco("");