>*/////////////////////////////////////////////////////////////////////// >* SOCKSERV.PRG: Winsock Server Program. >*/////////////////////////////////////////////////////////////////////// > #DEFINE sckClosed 0 > #DEFINE sckOpen 1 > #DEFINE sckListening 2 > #DEFINE sckConnectionPending 3 > #DEFINE sckResolvingHost 4 > #DEFINE sckHostResolved 5 > #DEFINE sckConnecting 6 > #DEFINE sckConnected 7 > #DEFINE sckClosing 8 > #DEFINE sckError 9 > > CLEAR > > _VFP.AutoYield = .T. > _SCREEN.Caption = "Server" > > DECLARE Sleep IN KERNEL32.DLL ; > INTEGER dwMilliseconds > > DECLARE INTEGER FlashWindow IN USER32.DLL ; > INTEGER hWnd, ; > INTEGER bInvert > > m.LO_Server = CREATEOBJECT( "Server_Side" ) > m.LO_Server.Show() > > READ EVENTS > >*/////////////////////////////////////////////////////////////////////// >DEFINE CLASS Server_Side AS Form >*/////////////////////////////////////////////////////////////////////// > Caption = "Winsock Server Program" > AutoCenter = .T. > > ADD OBJECT Listener_01 AS Server_Socket > > ADD OBJECT Socket_01 AS Server_Socket > > ADD OBJECT cmd_Disconnect AS CommandButton WITH ; > Caption = "Disconnect", ; > Top = 20 > > ADD OBJECT cmd_Send AS CommandButton WITH ; > Caption = "Send Data", ; > Top = 40 > > ADD OBJECT cmd_State AS CommandButton WITH ; > Caption = "Current State", ; > Top = 70 > >*----------------------------------------------------------------------- >PROCEDURE Init >*----------------------------------------------------------------------- > WITH THISFORM.Listener_01 > .LocalPort = 1007 > .Listen() > > ACTIVATE SCREEN > CLEAR > > ? "Host Name: ", .LocalHostName > ? "IP: ", .LocalIP > ? "Port: ", .LocalPort > ENDWITH > >*----------------------------------------------------------------------- >PROCEDURE QueryUnload >*----------------------------------------------------------------------- > IF THISFORM.Socket_01.State <> sckClosed > THISFORM.Socket_01.Close() > ENDIF > > CLEAR EVENTS > >*----------------------------------------------------------------------- >PROCEDURE cmd_Disconnect.Click >*----------------------------------------------------------------------- > IF THISFORM.Socket_01.State <> sckClosed > THISFORM.Socket_01.Close() > ENDIF > >*----------------------------------------------------------------------- >PROCEDURE cmd_Send.Click >*----------------------------------------------------------------------- > IF THISFORM.Socket_01.State = sckConnected > THISFORM.Socket_01.SendData( "Data from Server" ) > ELSE > = MESSAGEBOX( "No active connection", "Server" ) > ENDIF > >*----------------------------------------------------------------------- >PROCEDURE cmd_State.Click >*----------------------------------------------------------------------- > = MESSAGEBOX( "Current State of connection: " + ; > IIF( TYPE( "THISFORM.Socket_01" ) <> "O", "U", ; > STR( THISFORM.Socket_01.State ) ), "Client" ) > >*----------------------------------------------------------------------- >ENDDEFINE && Server_Side >*----------------------------------------------------------------------- > >*/////////////////////////////////////////////////////////////////////// >DEFINE CLASS Server_Socket AS OleControl >*/////////////////////////////////////////////////////////////////////// > OleClass = "MSWinsock.Winsock.1" > >*----------------------------------------------------------------------- >PROCEDURE ConnectionRequest && Event. >*----------------------------------------------------------------------- > LPARAMETER PN_RequestID > > IF THISFORM.Socket_01.State <> sckClosed > THISFORM.Socket_01.Close() > ENDIF > > THISFORM.Socket_01.Accept( m.PN_RequestID ) > > THIS.Flash_VFP() > > = MESSAGEBOX( "Connection accepted: " + STR( m.PN_RequestID ), "Server" ) > >*----------------------------------------------------------------------- >PROCEDURE Close && Event and Method. >*----------------------------------------------------------------------- > = DODEFAULT() > >*----------------------------------------------------------------------- >PROCEDURE DataArrival && Event. >*----------------------------------------------------------------------- > LPARAMETERS PN_BytesTotal > > LOCAL LC_Data > > m.LC_Data = SPACE( m.PN_BytesTotal ) + CHR( 0 ) > > THIS.GetData( @m.LC_Data, 8 ) && 8 = String Type > > THIS.Flash_VFP() > > = MESSAGEBOX( m.LC_Data, "Server: Data Arrived !" ) > >*----------------------------------------------------------------------- >PROCEDURE Error && Event. >*----------------------------------------------------------------------- > LPARAMETERS PN_Number, PC_Description, PN_Scode, PN_Source, ; > PC_HelpFile, PN_HelpContext, PL_CancelDisplay > > THIS.Flash_VFP() > > = MESSAGEBOX( ; > "Error #: " + LTRIM( STR( m.PN_Number ) ) + CHR( 10 ) + ; > "Desc: " + m.PC_Description, "Server" ) > >*----------------------------------------------------------------------- >PROCEDURE Flash_VFP >*----------------------------------------------------------------------- > FOR i = 1 TO 10 && Flash on, then off. > = FlashWindow( _VFP.HWND, 1 ) > = Sleep( 50 ) > NEXT > >*----------------------------------------------------------------------- >ENDDEFINE && Server_Socket >*----------------------------------------------------------------------- >*/////////////////////////////////////////////////////////////////////// >* EOF. >*/////////////////////////////////////////////////////////////////////// > >*/////////////////////////////////////////////////////////////////////// >* SOCKCLNT.PRG: Winsock Client Program. >*/////////////////////////////////////////////////////////////////////// >* >* .RemoteHost is specified as the machine where the server is running. >* >* Change the RemoteHost property to connect to any machine with a >* Point-to-Point connection. >* >*/////////////////////////////////////////////////////////////////////// > #DEFINE sckClosed 0 > #DEFINE sckOpen 1 > #DEFINE sckListening 2 > #DEFINE sckConnectionPending 3 > #DEFINE sckResolvingHost 4 > #DEFINE sckHostResolved 5 > #DEFINE sckConnecting 6 > #DEFINE sckConnected 7 > #DEFINE sckClosing 8 > #DEFINE sckError 9 > > CLEAR > > _VFP.AutoYield = .T. > _SCREEN.Caption = "Client" > > DECLARE Sleep IN KERNEL32.DLL ; > INTEGER dwMilliseconds > > DECLARE INTEGER FlashWindow IN USER32.DLL ; > INTEGER hWnd, ; > INTEGER bInvert > > m.LO_Client = CREATEOBJECT( "Client_Side" ) > m.LO_Client.Show() > > READ EVENTS > >*/////////////////////////////////////////////////////////////////////// >DEFINE CLASS Client_Side AS Form >*/////////////////////////////////////////////////////////////////////// > Caption = "Winsock Client Program" > AutoCenter = .T. > > ADD OBJECT Socket_01 AS Client_Socket > > ADD OBJECT cmd_Connect AS CommandButton WITH ; > Caption = "Connect" > > ADD OBJECT cmd_Disconnect AS CommandButton WITH ; > Caption = "Disconnect", ; > Top = 20 > > ADD OBJECT cmd_Send AS CommandButton WITH ; > Caption = "Send Data", ; > Top = 40 > > ADD OBJECT cmd_State AS CommandButton WITH ; > Caption = "Current State", ; > Top = 70 > >*----------------------------------------------------------------------- >PROCEDURE QueryUnload >*----------------------------------------------------------------------- > CLEAR EVENTS > >*----------------------------------------------------------------------- >PROCEDURE cmd_Connect.Click >*----------------------------------------------------------------------- > IF THISFORM.Socket_01.State <> sckClosed > = MESSAGEBOX( "Connection is not closed", "Client" ) > RETURN > ENDIF > > WITH THISFORM.Socket_01 > .RemoteHost = "gerry1a" > .RemotePort = 1007 > .Connect() && Asyncronous ! > ENDWITH > >*----------------------------------------------------------------------- >PROCEDURE cmd_Disconnect.Click >*----------------------------------------------------------------------- > IF THISFORM.Socket_01.State <> sckClosed > THISFORM.Socket_01.Close() > ENDIF > >*----------------------------------------------------------------------- >PROCEDURE cmd_Send.Click >*----------------------------------------------------------------------- > IF THISFORM.Socket_01.State = sckConnected > THISFORM.Socket_01.SendData( "Data from Client" ) > ELSE > = MESSAGEBOX( "No active connection", "Client" ) > ENDIF > >*----------------------------------------------------------------------- >PROCEDURE cmd_State.Click >*----------------------------------------------------------------------- > = MESSAGEBOX( "Current State of connection: " + ; > STR( THISFORM.Socket_01.State ), "Client" ) >*----------------------------------------------------------------------- >ENDDEFINE && Client_Side >*----------------------------------------------------------------------- > >*/////////////////////////////////////////////////////////////////////// >DEFINE CLASS Client_Socket AS OleControl >*/////////////////////////////////////////////////////////////////////// > OleClass = "MSWinsock.Winsock.1" > > N_Connects = 0 > >*----------------------------------------------------------------------- >PROCEDURE Connect && Method AND Event >*----------------------------------------------------------------------- > = DODEFAULT() > > THIS.N_Connects = THIS.N_Connects + 1 > > IF THIS.N_Connects > 50 > THIS.Flash_VFP() > > = MESSAGEBOX( "Connection attemps > 50; giving up", "Client" ) > > THIS.Close() > > THIS.N_Connects = 0 > ENDIF > >*----------------------------------------------------------------------- >PROCEDURE Close && Method AND Event >*----------------------------------------------------------------------- > = DODEFAULT() > >*----------------------------------------------------------------------- >PROCEDURE DataArrival && Event. >*----------------------------------------------------------------------- > LPARAMETERS PN_BytesTotal > > LOCAL LC_Data > > m.LC_Data = SPACE( m.PN_BytesTotal ) + CHR( 0 ) > > THIS.GetData( @m.LC_Data, 8 ) && 8 = String Type > > THIS.Flash_VFP() > > = MESSAGEBOX( m.LC_Data, "Client: Data Arrived !" ) > >*----------------------------------------------------------------------- >PROCEDURE Error && Event. >*----------------------------------------------------------------------- > LPARAMETERS PN_Number, PC_Description, PN_Scode, PN_Source, ; > PC_HelpFile, PN_HelpContext, PL_CancelDisplay > > THIS.Flash_VFP() > > = MESSAGEBOX( ; > "Error #: " + LTRIM( STR( m.PN_Number ) ) + CHR( 10 ) + ; > "Desc: " + m.PC_Description, "Client" ) > >*----------------------------------------------------------------------- >PROCEDURE Flash_VFP >*----------------------------------------------------------------------- > FOR i = 1 TO 10 && Flash on, then off. > = FlashWindow( _VFP.HWND, 1 ) > = Sleep( 50 ) > NEXT > >*----------------------------------------------------------------------- >ENDDEFINE && Client_Socket >*----------------------------------------------------------------------- >*/////////////////////////////////////////////////////////////////////// >* EOF. >*/////////////////////////////////////////////////////////////////////// >