[vb.net] errore System.IO.IOException

lunedì 19 aprile 2010 - 16.44

nala Profilo | Newbie

Ciao a tutti!
Praticamente vorrei fare in modo di stampare qualsiasi cosa in pdf proveniente da una stampante di tipo PostScript.

Quindi:
- Creo una stampante virtuale di tipo postscript in modo che compaia tra quelle presenti nel sistema operativo client
- Il mio programma server VB.NET si connette alla porta 515 (porta della stampante) e riceve i dati inviati
- ed infine una volta ricevuti i dati crea il file postscript .ps e da quello genere il file .pdf

Ho creato il programma e funziona!! l'unico problema è quando invio i dati da un pc con sistema operativo mac... in questo caso mi restituisce la seguente eccezione:

Impossibile leggere dati dalla connessione del trasporto: Connessione in corso interrotta forzatamente dall'host remoto.
Quale può essere il problema??

Vi posto il codice:
Imports System.Net.Sockets Imports System.Text Imports System.IO Imports System.Threading Imports System.Net Imports System.Printing Public Class Form1 Dim DatiStampa As String Dim DatiIntestazione Dim SwitchDati As Boolean Public Listener As New TcpListener(515) Dim Client As TcpClient Dim NetStr As NetworkStream Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Try Listener.Start() Dim serverThread As New Thread(New ThreadStart(AddressOf StartListen)) Control.CheckForIllegalCrossThreadCalls = False serverThread.Start() Catch ex As Exception ex.StackTrace.ToString() End Try End Sub Private Sub StartListen() While True Try Client = Listener.AcceptTcpClient() Client.NoDelay = True 'Inizializza lo stream NetStr = Client.GetStream Dati() Catch ex As Exception ex.StackTrace.ToString() 'If Listener.Start Then 'clientSocket.Close() ' End If End Try End While End Sub Public Sub Dati() Dim dati As String 'For Each pq In ps.GetPrintQueues While True System.Windows.Forms.Application.DoEvents() Try If NetStr.CanRead And NetStr.CanWrite Then 'Legge Client.ReceiveBufferSize bytes a partire dal primo 'dallo stream e li deposita In Bytes 'se ci sono bytes nulli, non verranno contati 'di Default, Client.ReceiveBufferSize = 8129 Dim Bytes(Client.ReceiveBufferSize) As Byte NetStr.Read(Bytes, 0, Bytes.Length) Dim AppoggioSwitch As String Dim mess(0) As Byte 'Trasforma i bytes ricevuti In stringa dati = System.Text.Encoding.ASCII.GetString(Bytes) If SwitchDati = False Then Client.NoDelay = True AppoggioSwitch = dati.Substring(1) mess(0) = CByte(0) NetStr.Write(mess, 0, mess.Length) End If DatiStampa = DatiStampa & dati If dati.Contains("%%EOF") Then mess(0) = CByte(0) NetStr.Write(mess, 0, mess.Length) Client.Close() Dim PsStart As Long PsStart = DatiStampa.IndexOf("%!PS") Dim DatiS As String DatiS = DatiStampa.Substring(PsStart) Dim fs As FileStream fs = New FileStream("c:\test2.ps", IO.FileMode.Append) Dim s As New StreamWriter(fs) s.WriteLine(DatiS) s.Close() Dim nomefile As String nomefile = NFile() gsapi.ConvertFile(nomefile) System.IO.File.Delete("c:\test2.ps") dati = Nothing DatiStampa = "" DatiIntestazione = "" SwitchDati = False System.Threading.Thread.Sleep(2000) Exit While If AppoggioSwitch = Chr(3) Then SwitchDati = True End If End If End If Catch ex As Exception ex.StackTrace.ToString() End Try End While ' Next End Sub Public Function NFile() As String Dim num As Integer Dim num2 As Integer Dim nome As String Dim n1 As Integer Dim n2 As Integer Dim dt As String Dim nomefile As String num = DatiStampa.IndexOf("%%Title:") + 8 num2 = (DatiStampa.IndexOf("%%Creator:")) - num nome = DatiStampa.Substring(num, num2) If nome.IndexOf(".") Then nome = nome.Replace(".", "") End If nome = nome.Trim n1 = DatiStampa.IndexOf("%%CreationDate:") + 15 n2 = (DatiStampa.IndexOf("%%For:")) - n1 dt = DatiStampa.Substring(n1, n2) If dt.IndexOf("/") Or dt.IndexOf(":") Then dt = dt.Replace("/", "-") dt = dt.Replace(":", "-") End If dt = dt.Trim nomefile = nome & "_" & dt Return nomefile End Function End Class
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5