簡體   English   中英

從C客戶端向Java服務器發送字符串時出錯

[英]error while sending a String from C client to Java server

我從C客戶端向Java服務器發送一個整數,它運行良好。 但是,當我嘗試對得到的字符串執行相同的操作並且出錯時,這是發送字符串的客戶端代碼

char clientString[30];

    printf("String to send : \n");

        if( send( to_server_socket, &clientString, sizeof( clientString ), 0 ) != sizeof( clientString ) )
        {
            printf( "socket write failed");
            exit( -1 );
        }

和讀取的Java代碼

DataInputStream din = new DataInputStream(socket.getInputStream());
          String clientString=din.readUTF();
           System.out.println(clientString);

錯誤

java.io.DataInputStream.readFully(DataInputStream.java:180)處的java.io.EOFException java.io.DataInputStream.readUTF(DataInputStream.java:547)處java.io.DataInputStream.readUTF(DataInputStream.java:592)在ServiceRequest.run(ServiceRequest.java:43)在java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:439)在java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:303)在java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:895)上的java.util.concurrent.FutureTask.run(FutureTask.java:138)在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor) java:918),位於java.lang.Thread.run(Thread.java:680)

編輯:我嘗試使用din.readLine() ,我不再有錯誤,但是如果我在客戶端上輸入fffffff12,我會在服務器中得到fffffff12`?7E ^Ê?h

無論輸入多長時間,您將在clientString數組中發送所有數據。 正確終止字符串,而僅發送例如strlen(clientString)字節。

可能的問題在於,在客戶端上您正在編寫ASCII字符串,而在服務器端上您正在讀取UTF,請嘗試將數據讀取為ASCII,並且如果可能的話,請提及發生的異常。 此方法可能引發兩個異常:1- IO異常或2- EOF異常。

readUTF不僅從套接字讀取字節。 首先讀取字符串的長度(作為16位整數),然后讀取字符串。 問題是您發送的內容不是readUTF成功運行所必需的。

正如Joachim Pileborg指出的那樣,您還將發送clientString的整個30個字節(包括未明確設置的所有剩余字節)。 您應該這樣發送:

send(to_server_socket, clientString, strlen(clientString), 0);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM