| xdmisterx |
| | Chat client-server con protocollo TCP e trasferimento di file: CODICE ;client TCPStartup() #include <GuiConstants.au3> #include <EditConstants.au3> #include <WindowsConstants.au3> #include <GuiEdit.au3>
HotKeySet("+{ENTER}","_invio")
Global $title="MxMSN"
$ip=InputBox($title,"Inserisci l'ip:",@IPAddress1,"",50,50) If $ip="" Then Exit $porta=InputBox($title,"Inserisci la porta:","8893","",50,50) If $porta="" Then Exit $socket=TCPConnect($ip,$porta) If $socket=-1 Then MsgBox(16,$title,"Impossibile collegarsi.",5) Exit EndIf
GUICreate($title,400,270) GUISetFont(9,"","","Comic Sans MS") $edit=GUICtrlCreateEdit("",0,0,400,200,$ES_READONLY+$WS_VSCROLL) $msg=GUICtrlCreateInput("",10,210,300,20) $send=GUICtrlCreateButton("Invia",315,210,80,20) $filesend=GUICtrlCreateButton("Invia file",10,240,190,20) $trilla=GUICtrlCreateButton("Trilla",205,240,190,20)
GUISetState()
While 1 ;ricezione $recv=TCPRecv($socket,2048) If StringLen($recv) Then ;uscita If StringInStr($recv,"xEXITx",1) Then _GUICtrlEdit_AppendText($edit,"L'altra parte ha chiuso la chat."& @CRLF) EndIf ;ricezione testo If StringInStr($recv,"xMSGx",1) Then $string=StringReplace($recv,"xMSGx","","",1) _GUICtrlEdit_AppendText($edit,"Remoto -> "& $string & @CRLF) EndIf ;ricezione file If StringInStr($recv,"xFileSendx",1) Then _GUICtrlEdit_AppendText($edit,"Ricezione file in corso..."& @CRLF) $file_recv=StringReplace($recv,"xFileSendx","",1) $file_recv_save=FileSaveDialog($title,@DesktopDir,"All(*.*)",16,$file_recv) Sleep(50) GUISetState(@SW_DISABLE) TCPSend($socket,"xOKx") $tcprecvfile=_TCPFileRecv($file_recv_save,$socket) GUISetState(@SW_ENABLE) If $tcprecvfile=0 Then MsgBox(16,$title,"Invio non riuscito.",5) Else _GUICtrlEdit_AppendText($edit,"File ricevuto con successo."& @CRLF) EndIf EndIf ;trillo If StringInStr($recv,"xTRILLAx",1) Then WinFlash($title,"",3,1000) EndIf EndIf Switch GUIGetMsg() Case $gui_event_close ;exit TCPSend($socket,"xEXITx") Exit Case $send ;invia testo $msg1=GUICtrlRead($msg) If $msg1 <> "" Then TCPSend($socket,"xMSGx"& $msg1) GUICtrlSetData($msg,"") _GUICtrlEdit_AppendText($edit,"Locale -> "& $msg1 & @CRLF) EndIf Case $filesend ;invia file $local=FileOpenDialog($title,@DesktopDir,"All(*.*)") If $local <> "" Then _GUICtrlEdit_AppendText($edit,"Invio file in corso..."& @CRLF) $filesplit=StringSplit($local,"") $splitted=$filesplit[UBound($filesplit)-1] TCPSend($socket,"xFileSendx"& $splitted) While 1 $filerecv=TCPRecv($socket,2048) If StringLen($filerecv) Then If StringInStr($filerecv,"xOKx",1) Then GUISetState(@SW_DISABLE) Sleep(100) $tcpsendfile=_TCPFileSend($local,$socket) GUISetState(@SW_ENABLE) If $tcpsendfile=0 Then MsgBox(16,$title,"Invio non riuscito.",5) Else _GUICtrlEdit_AppendText($edit,"File inviato con successo."& @CRLF) EndIf ExitLoop EndIf EndIf WEnd EndIf Case $trilla ;trilla TCPSend($socket,"xTRILLAx") EndSwitch WEnd
;file send Func _TCPFileSend($sFile,$_socket) Local $error=False $sFileOpen=FileOpen($sFile, 16 + 0) $sFileRead=FileRead($sFileOpen) FileClose($sFileOpen) $sFileSize=BinaryLen($sFileRead) $prog=True TCPSend($_socket,"xBufferOnx") If $sFileSize < 100000 Then $TCPSend=TCPSend($_socket,$sFileRead) $prog=False Else ProgressOn($title,"Invio file in corso...","0%") $buff=$sFileRead Do $perc=Round((BinaryLen($buff)/$sFileSize)*100,0) $percfin=100-$perc $TCPSend=TCPSend($_socket,BinaryMid($buff,1,100000)) $buff=BinaryMid($buff,$TCPSend+1) ProgressSet($percfin,$percfin &"%") Until BinaryLen($buff)=0 EndIf Sleep(100) TCPSend($_socket,"xEndTransx") If $prog=True Then ProgressOff() If $error=True Then Return 0 Else Return 1 EndIf EndFunc ;==> _TCPFileSend
;file recv Func _TCPFileRecv($rFile,$_socket) Local $error=False Local $buff, $no_recv_count=0 While 1 $recv=TCPRecv($_socket,2024) If StringInStr($recv,"xBufferOnx",1) Then ExitLoop WEnd While 1 $TCPRecv=TCPRecv($_socket,100000) If StringLen($TCPRecv) Then If $TCPRecv <> "" Then $str=BinaryToString($TCPRecv) $buff &=$str $no_recv_count=0 EndIf If StringInStr($TCPRecv,"xEndTransx",1) Then ExitLoop EndIf EndIf WEnd If $buff="" Then $error=True Else $buff=StringToBinary($buff) $rFileOpen=FileOpen($rFile,16+2) If $rFileOpen=-1 Then $error=True Else $rFileWrite=FileWrite($rFileOpen,$buff) If $rFileWrite=0 Then $error=True EndIf FileClose($rFileOpen) EndIf EndIf If $error=True Then Return 0 Else Return 1 EndIf EndFunc ;==> _TCPFileRecv
Func _invio() If WinActive($title) Then $msg1=GUICtrlRead($msg) If $msg1 <> "" Then TCPSend($socket,"xMSGx"& $msg1) GUICtrlSetData($msg,"") _GUICtrlEdit_AppendText($edit,"Locale -> "& $msg1 & @CRLF) EndIf EndIf EndFunc Server: CODICE ;server TCPStartup() #include <GuiConstants.au3> #include <EditConstants.au3> #include <WindowsConstants.au3> #include <Inet.au3> #include <GuiEdit.au3>
HotKeySet("+{ENTER}","_invio")
Global $title="MxMSN", $internet=False
$ping=Ping("maya.ngi.it",3000) If $ping <> 0 Then $internet=True
$conn=GUICreate($title,140,190) GUICtrlCreateLabel("Indirizzi ip disponibili:",10,15) $list=GUICtrlCreateList("",10,35,120,100) GUICtrlCreateLabel("Porta =>",10,140) $porta1=GUICtrlCreateInput("8893",55,137,75,20,BitOR(0x2000,0x0001)) $ascolto=GUICtrlCreateButton("Avvia",10,160,120,20)
If $internet=True Then GUICtrlSetData($list,_GetIP()) EndIf If @IPAddress1 <> "0.0.0.0" Then GUICtrlSetData($list,@IPAddress1) EndIf If @IPAddress2 <> "0.0.0.0" Then GUICtrlSetData($list,@IPAddress2) EndIf If @IPAddress3 <> "0.0.0.0" Then GUICtrlSetData($list,@IPAddress3) EndIf If @IPAddress4 <> "0.0.0.0" Then GUICtrlSetData($list,@IPAddress4) EndIf
GUISetState()
While 1 Switch GUIGetMsg() Case $gui_event_close Exit Case $ascolto $ip=GUICtrlRead($list) $porta=GUICtrlRead($porta1) If $ip <> "" Then If $porta <> "" Then ExitLoop EndIf EndIf EndSwitch WEnd GUIDelete($conn)
$listen=TCPListen($ip,$porta) Do $socket=TCPAccept($listen) Until $socket > -1
GUICreate($title,400,270) GUISetFont(9,"","","Comic Sans MS") $edit=GUICtrlCreateEdit("",0,0,400,200,$ES_READONLY+$WS_VSCROLL) $msg=GUICtrlCreateInput("",10,210,300,20) $send=GUICtrlCreateButton("Invia",315,210,80,20) $filesend=GUICtrlCreateButton("Invia file",10,240,190,20) $trilla=GUICtrlCreateButton("Trilla",205,240,190,20)
GUISetState()
While 1 ;ricezione $recv=TCPRecv($socket,2048) If StringLen($recv) Then ;uscita If StringInStr($recv,"xEXITx",1) Then _GUICtrlEdit_AppendText($edit,"L'altra parte ha chiuso la chat."& @CRLF) EndIf ;ricezione testo If StringInStr($recv,"xMSGx",1) Then $string=StringReplace($recv,"xMSGx","","",1) _GUICtrlEdit_AppendText($edit,"Remoto -> "& $string & @CRLF) EndIf ;ricezione file If StringInStr($recv,"xFileSendx",1) Then _GUICtrlEdit_AppendText($edit,"Ricezione file in corso..."& @CRLF) $file_recv=StringReplace($recv,"xFileSendx","",1) $file_recv_save=FileSaveDialog($title,@DesktopDir,"All(*.*)",16,$file_recv) Sleep(50) GUISetState(@SW_DISABLE) TCPSend($socket,"xOKx") $tcprecvfile=_TCPFileRecv($file_recv_save,$socket) GUISetState(@SW_ENABLE) If $tcprecvfile=0 Then MsgBox(16,$title,"Invio non riuscito.",5) Else _GUICtrlEdit_AppendText($edit,"File ricevuto con successo."& @CRLF) EndIf EndIf ;trillo If StringInStr($recv,"xTRILLAx",1) Then WinFlash($title,"",3,1000) EndIf EndIf Switch GUIGetMsg() Case $gui_event_close TCPSend($socket,"xEXITx") Exit Case $send $msg1=GUICtrlRead($msg) If $msg1 <> "" Then TCPSend($socket,"xMSGx"& $msg1) GUICtrlSetData($msg,"") _GUICtrlEdit_AppendText($edit,"Locale -> "& $msg1 & @CRLF) EndIf Case $filesend $local=FileOpenDialog($title,@DesktopDir,"All(*.*)") If $local <> "" Then _GUICtrlEdit_AppendText($edit,"Invio file in corso..."& @CRLF) $filesplit=StringSplit($local,"") $splitted=$filesplit[UBound($filesplit)-1] TCPSend($socket,"xFileSendx"& $splitted) While 1 $filerecv=TCPRecv($socket,2048) If StringLen($filerecv) Then If StringInStr($filerecv,"xOKx",1) Then Sleep(100) GUISetState(@SW_DISABLE) $tcpsendfile=_TCPFileSend($local,$socket) GUISetState(@SW_ENABLE) If $tcpsendfile=0 Then MsgBox(16,$title,"Invio non riuscito.",5) Else _GUICtrlEdit_AppendText($edit,"File inviato con successo."& @CRLF) EndIf ExitLoop EndIf EndIf WEnd EndIf Case $trilla TCPSend($socket,"xTRILLAx") EndSwitch WEnd
;file send Func _TCPFileSend($sFile,$_socket) Local $error=False $sFileOpen=FileOpen($sFile, 16 + 0) $sFileRead=FileRead($sFileOpen) FileClose($sFileOpen) $sFileSize=BinaryLen($sFileRead) $prog=True TCPSend($_socket,"xBufferOnx") If $sFileSize < 100000 Then $TCPSend=TCPSend($_socket,$sFileRead) $prog=False Else ProgressOn($title,"Invio file in corso...","0%") $buff=$sFileRead Do $perc=Round((BinaryLen($buff)/$sFileSize)*100,0) $percfin=100-$perc $TCPSend=TCPSend($_socket,BinaryMid($buff,1,100000)) $buff=BinaryMid($buff,$TCPSend+1) ProgressSet($percfin,$percfin &"%") Until BinaryLen($buff)=0 EndIf Sleep(100) TCPSend($_socket,"xEndTransx") If $prog=True Then ProgressOff() If $error=True Then Return 0 Else Return 1 EndIf EndFunc ;==> _TCPFileSend
;file recv Func _TCPFileRecv($rFile,$_socket) Local $error=False Local $buff, $no_recv_count=0 While 1 $recv=TCPRecv($_socket,2024) If StringInStr($recv,"xBufferOnx",1) Then ExitLoop WEnd While 1 $TCPRecv=TCPRecv($_socket,100000) If StringLen($TCPRecv) Then If $TCPRecv <> "" Then $str=BinaryToString($TCPRecv) $buff &=$str $no_recv_count=0 EndIf If StringInStr($TCPRecv,"xEndTransx",1) Then ExitLoop EndIf EndIf WEnd If $buff="" Then $error=True Else $buff=StringToBinary($buff) $rFileOpen=FileOpen($rFile,16+2) If $rFileOpen=-1 Then $error=True Else $rFileWrite=FileWrite($rFileOpen,$buff) If $rFileWrite=0 Then $error=True EndIf FileClose($rFileOpen) EndIf EndIf If $error=True Then Return 0 Else Return 1 EndIf EndFunc ;==> _TCPFileRecv
Func _invio() If WinActive($title) Then $msg1=GUICtrlRead($msg) If $msg1 <> "" Then TCPSend($socket,"xMSGx"& $msg1) GUICtrlSetData($msg,"") _GUICtrlEdit_AppendText($edit,"Locale -> "& $msg1 & @CRLF) EndIf EndIf EndFunc vi allego anche gli eseguibili e il file per il trillo(quello di msn xD) quifunziona sia in rete locale che in internet(l'unica cosa potrebbe essere il router che vi da fastidio ) adesso sto facendo una funzione per mandare file splittati(senṇ con file da 1gb va in overflow) testato con pacchetti di winrar per vedere se arrivavano integri. ciao
| | |
| |
|