B4J Question [RESOLVED] java.net.SocketException: Connection reset by peer: socket write error

MarcoRome

Expert
Licensed User
Longtime User
Hi All i have this code:
B4X:
    Dim invio As String  = $"{
  "Messages":[
    {
      "From": {
        "Email": "info@yyyyy.com",
        "Name": "Studio xxxx"
      },
      "To": [
        {"Email": "drtxxxx@gmail.com",
        "Name": "Marco"}
      ],
      "Subject": "MESSAGGIO DA STUDIO MARIO XXXXX",
      "TextPart": "${elaborazioneTESTO}",
      "HTMLPart": "<h3>Email da Studio XXXXXX. Per rispondere a questa email <a href='mailto:marioxxxx@gmail.com'>CLICCA QUI</a></h3><br />${elaborazioneHTML}",
      "CustomID": "AppGettingStartedTest",
      "Attachments": [
                                {
                                        "ContentType": "application/pdf",
                                        "Filename": "pippo.pdf",
                                        "Base64Content": "${converti_base64}"
                                }
                        ]
    }
    ]
    }"$

        Dim job2 As HttpJob

        'Send a POST request
        job2.Initialize("Job2", Me)
        job2.Username = username
        job2.Password = pw
        job2.PostString("https://api.mailjet.com/v3.1/send", invio)
        job2.GetRequest.SetHeader("Content-Type", "application/json")

        Wait For (job2) JobDone(job2 As HttpJob)
        If job2.Success Then
            Log(job2.GetString)

The string converti_base64 is Base64 ( 112kb )

I have this error:

Waiting for debugger to connect...
Program started.
JVBERi0xLjcKJcfsj6IKNSAwIG9iago8PC9MZW5ndGggNiAwIFIvRmlsdGVyIC9GbGF0ZURlY29kZT4+CnN0cmVhbQp4nN1d6a8tR3GXF+KX+xAPAjbGZrkxJDkHcsfT28x0bDAhOJGifCF6Uj5APhFAimQiO/+/lOqZXqq7fzUz575rEsXPy/EsvVRX1/Kr6prP78dB2/sx/Ek/fvvZ3Yf/Ot//4b/v1sv3X/zh7vM7O6hpmub1Av/928/uf/GSnl/ulRpGe//y93fj4L23o17vq3s/DrO+n/006EXdv/zs7teX164PejB+ns2Zn8tg58XYxzxq7eX168M4LEotzl3euOphHkdrLm9e3WC0V/PlK9cHmo8btb782frTerdc3roqPVi/uMuz64MZxinc//OrHcbZ5F96Cn3++8t/vvv05d2v7rbpnqKWGmVymcFM9/Oih8VW5NLGLAc0sPYR5KJJvB4uLsp7TT+XYXSTcvziG1c1LG6cLdFND94ugWzL4ObJ+Y1qs3fWEdXGgSg1O0VkW386NxGx1DBpTaP/zR/pqnV61vPleWop/yi9fPX6oIhq8+U3XxCh6aYyl69dZ+8rWp/kzB1a69EN08KJTUR5+Z9PuZyKulDE/pMf7Hgr+1vL155R90Wi2dev1LGxkwqkenCD17O3l2/QbTXp2fy/Wy/iWMuJWa8XUdrRv83sXn3dlCF5dT87ounU78O/ICIQ95Ao+GaYOxHdL5dvBVFBP60qRCp0fzvc9aPyji/1l7lAbLzvBHlnZlWx2bfD0Bcz2+nybnqHt/id8Khyy+wu7wUp6owftb28fyXaWOsU6DJOcpw07+i74acm8i6X710nEsGBCN9fpe1slWYXv1cu/oBdBLfv88W/LBc/yBd/WC7+KF5cCaL0ZIlDWrn96rypSGF42uhWD073DPNXqxoaSXm4epfQpl20nzxjALb9/3qlnFOT5439Td55bIn4yj0LYoFke+HJxccp05JP...
java.net.SocketException: Connection reset by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:111)
at java.net.SocketOutputStream.write(SocketOutputStream.java:155)
at sun.security.ssl.OutputRecord.writeBuffer(OutputRecord.java:431)
at sun.security.ssl.OutputRecord.write(OutputRecord.java:417)
at sun.security.ssl.SSLSocketImpl.writeRecordInternal(SSLSocketImpl.java:879)
at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:850)
at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123)
at okio_Okio$1.write(Okio.java:78)
at okio.AsyncTimeout$1.write(AsyncTimeout.java:179)
at okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:171)
at okio.RealBufferedSink.write(RealBufferedSink.java:41)
at okhttp3.internal.http1.Http1Codec$FixedLengthSink.write(Http1Codec.java:287)
at okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:171)
at okio.RealBufferedSink.write(RealBufferedSink.java:85)
at anywheresoftware.b4h.okhttp.OkHttpClientWrapper$PostPayload.writeTo(OkHttpClientWrapper.java:538)
at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:48)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:120)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:179)
at okhttp3.RealCall.execute(RealCall.java:63)
at anywheresoftware.b4h.okhttp.OkHttpClientWrapper.executeWithTimeout(OkHttpClientWrapper.java:156)
at anywheresoftware.b4h.okhttp.OkHttpClientWrapper.access$0(OkHttpClientWrapper.java:153)
at anywheresoftware.b4h.okhttp.OkHttpClientWrapper$ExecuteHelper.run(OkHttpClientWrapper.java:201)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
ResponseError. Reason: java.net.SocketException: Connection reset by peer: socket write error, Response:

if I replace the variable converti_base64 with the text as in the following example:

B4X:
        Dim invio As String  = $"{
  "Messages":[
    {
      "From": {
        "Email": "info@cxxx..com",
        "Name": "Studio Mario xxxx"
      },
      "To": [
        {"Email": "xxxxx@gmail.com",
        "Name": "Marco"}
      ],
      "Subject": "MESSAGGIO DA STUDIO MARIO XXX",
      "TextPart": "${elaborazioneTESTO}",
      "HTMLPart": "<h3>Email da Studio Commercialista xxx.. Per rispondere a questa email <a href='mailto:mttttt@gmail.com'>CLICCA QUI</a></h3><br />${elaborazioneHTML}",
      "CustomID": "AppGettingStartedTest",
      "Attachments": [
                                {
                                        "ContentType": "application/pdf",
                                        "Filename": "pippo.pdf",
                                        "Base64Content": "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..."
                                }
                        ]
    }
    ]
    }"$

When i compiled i have ( of course ) this error:

Dim invio As String = $\
javac 1.8.0_231
src\b4j\example\main.java:211: error: constant string too long
.....

NOTE:
if i use a smaller base64 file everything works. so it seems that the problem is when the file is bigger. The site accepts files up to 15MB and the file that i send is only 112kb.
I tried to send the file to the server through post man ( Curl ) and the file is accepted and sent.


1586094597037.png



So I think it's a socket problem with big string ( https://stackoverflow.com/questions/7742033/error-while-writing-a-big-string-on-a-socket )
Any idea, another way ??
Thank you very much
Marco
 
Last edited:

MarcoRome

Expert
Licensed User
Longtime User
Hi Erel, i tried also this code:

B4X:
job2.PostFile("https://api.mailjet.com/v3.1/send", File.DirApp,"invio.txt")

and

B4X:
job2.PostBytes("https://api.mailjet.com/v3.1/send", invio.GetBytes("UTF8"))

And ALL WORK only if file in attachment is "little".
with same example if put Base64 ( look #1 that in PostMan work ) i have this error ( File is 112kb ):

java.net.SocketException: Connection reset by peer: socket write error

Again if Json is wrong i have response from server.
Here the problem is that it does not send anything to the server.

The error is after this:

B4X:
job2.GetRequest.SetHeader("Content-Type", "application/json")
--- After GetRequest have error        
Wait For (job2) JobDone(job2 As HttpJob)

I send you a little example ready to use. If you have a minute.
Thank you very much
 
Last edited:
Upvote 0

MarcoRome

Expert
Licensed User
Longtime User
Hi Erel.
If you see post #1 with Post Man havent problem also if i past very long base64. Work without problem. Server no rejects but give me success and send email with attachment
 
Last edited:
Upvote 0

MarcoRome

Expert
Licensed User
Longtime User
Once you do it you need to make another test and break the very long base64 string into multiple lines. It is possible that the server rejects the payload because of this.

How do I insert a break on multiple lines for a Base64 string ?
 
Upvote 0

MarcoRome

Expert
Licensed User
Longtime User
Dear Erel thank you for your replay but dont change nothing.
Even after using the JSONGenerator function, emails with a small file size is sent, otherwise it always returns the same error.

B4X:
Dim mappa As Map = CreateMap("Messages": Array( _
    CreateMap("From": CreateMap("Email": "info@devil-app.com", "Name": "Studio XXXX"), _
    "To": Array(CreateMap("Email":"info@devil-app.com", "Name": "Marco")), _
    "Subject":"MESSAGGIO DA STUDIO XXXX", _
    "TextPart": "TEST", _
    "HTMLPart": "<h3>Email da Studio XXXXX. Per rispondere a questa email <a href='mailto:devilapp.eu@gmail.com'>CLICCA QUI</a></h3><br />TEST", _
    "Attachments": Array(CreateMap("ContentType":"application/pdf", "Filename":"test.pdf", "Base64Content":$"${converti_base64}"$)))))

    Dim jg As JSONGenerator
    jg.Initialize(mappa)
    Log(jg.ToPrettyString(4))
    Dim invio As String = jg.ToPrettyString(4)
   
        Dim job2 As HttpJob
        'Send a POST request
        job2.Initialize("", Me)
        job2.Username = username
        job2.Password = pw
        job2.PostString("https://api.mailjet.com/v3.1/send", invio)
        job2.GetRequest.SetHeader("Content-Type", "application/json")
        'job2.GetRequest.SetContentType("application/json")
      
        Wait For (job2) JobDone(job2 As HttpJob)
        If job2.Success Then
            Log(job2.GetString)
            Dim res As String = job2.GetString
                   
            Dim parser As JSONParser
            parser.Initialize(res)
            Dim root As Map = parser.NextObject
            Dim Messages As List = root.Get("Messages")
            For Each colMessages As Map In Messages
                Dim Status As String = colMessages.Get("Status")
            Next  
            If Status = "success" Then
                Log("OK SEND")
            Else
                Log("PROBLEM")
            End If
        End If

What i noticed is that through the B4J program it works if the file to be attached does not exceed 80000 in Base64. If major (as in the attached example there are both files) it crashes with the following error:

Waiting for debugger to connect...
Program started.

java.net.SocketException: Connection reset by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:111)
at java.net.SocketOutputStream.write(SocketOutputStream.java:155)
at sun.security.ssl.OutputRecord.writeBuffer(OutputRecord.java:431)
at sun.security.ssl.OutputRecord.write(OutputRecord.java:417)
at sun.security.ssl.SSLSocketImpl.writeRecordInternal(SSLSocketImpl.java:879)
at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:850)
at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123)
at okio_Okio$1.write(Okio.java:78)
at okio.AsyncTimeout$1.write(AsyncTimeout.java:179)
at okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:171)
at okio.RealBufferedSink.write(RealBufferedSink.java:41)
at okhttp3.internal.http1.Http1Codec$FixedLengthSink.write(Http1Codec.java:287)
at okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:171)
at okio.RealBufferedSink.write(RealBufferedSink.java:85)
at anywheresoftware.b4h.okhttp.OkHttpClientWrapper$PostPayload.writeTo(OkHttpClientWrapper.java:538)
at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:48)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:120)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:179)
at okhttp3.RealCall.execute(RealCall.java:63)
at anywheresoftware.b4h.okhttp.OkHttpClientWrapper.executeWithTimeout(OkHttpClientWrapper.java:156)
at anywheresoftware.b4h.okhttp.OkHttpClientWrapper.access$0(OkHttpClientWrapper.java:153)
at anywheresoftware.b4h.okhttp.OkHttpClientWrapper$ExecuteHelper.run(OkHttpClientWrapper.java:201)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
ResponseError. Reason: java.net.SocketException: Connection reset by peer: socket write error, Response:

To understand if it was a problem on the MailJet site (where I purchased the service) I tried to perform the same operations through Curl and it was always successful (the email was sent and received with attachment).

Thank you very much
Marco
 
Last edited:
Upvote 0

MarcoRome

Expert
Licensed User
Longtime User
Only now have i been able to carry out new tests.
Changing the code in this way ( with okHttp ) also accepts attachments of any size (<15MB)

B4X:
Dim job2 As HttpJob

        'Send a POST request
        Dim userPwd As String = $"${username}:${pw}"$
        Dim su As StringUtils
        Dim byt() As Byte = userPwd.GetBytes("UTF8")
        Dim suUserPwd As String = su.EncodeBase64(byt)
           
        job2.Initialize("", Me)
        job2.PostString("https://api.mailjet.com/v3.1/send", invio)
        job2.GetRequest.SetHeader("Authorization", $"Basic ${suUserPwd}"$)
        job2.GetRequest.SetHeader("Content-Type", "application/json")
 
Upvote 0
Top