亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我的服務器程序無法向我編寫的客戶端程序發送數據

我的服務器程序無法向我編寫的客戶端程序發送數據

肥皂起泡泡 2023-03-17 15:43:09
所以服務器程序由以下代碼組成:import java.io. * ;import java.net. * ;import java.util. * ;public class TimeServer {    public static void main(String[] args) {        try {            //Create sockets            ServerSocket ss = new ServerSocket(60000);            Socket rs = ss.accept();            //create streams            BufferedInputStream bs = new BufferedInputStream(rs.getInputStream());            InputStreamReader isr = new InputStreamReader(bs);            BufferedOutputStream bos = new BufferedOutputStream(rs.getOutputStream());            PrintWriter pw = new PrintWriter(bos);            //set timeout            rs.setSoTimeout(20000);            int c = 0;            StringBuilder sb = new StringBuilder();            //while loop reads in a character until a period (includes period)              while (((char) c != '.')) {                c = isr.read();                //append each char to a string builder                sb.append((char) c);            }            //convert stringbuilder to string            String str = sb.substring(0);            //If string equals "time." returns time else error message            if (str.compareTo("time.") == 0) {                Date now = new Date();                pw.print("time is: " + now.toString());                pw.flush();            }            else {                pw.print("Invalid syntax: connection closed");                pw.flush();            }            //close socket            rs.close();            //close serversocket            ss.close();        } catch(IOException i) {            System.out.println(i.getMessage());        }    }}問題是,如果我在單獨的 cmd.exe 中運行每個程序,盡管使用 localhost 作為 IP 地址,它們仍無法通信。我似乎無法在導致此問題的代碼中找到邏輯錯誤,想知道是否有人可以提供幫助?
查看完整描述

1 回答

?
慕慕森

TA貢獻1856條經驗 獲得超17個贊

問題是您正在使用 BufferedOutputStream,并且在 PrintWriter 上寫入后立即關閉套接字。您所寫的內容保留在緩沖區中,并且套接字在任何內容發送到客戶端之前關閉。


您需要flush在關閉之前以強制發送緩沖區的內容:


...

//close socket

pw.flush();

rs.close();

...

TimeClient 包含一個小錯誤:你循環接收直到你得到一個-1正確的,但是你將它附加-1到StringBuilder錯誤的。它應該是:


//while loop reads each character into stringbuilder

while(true){

c = isr.read();

if (c == -1) { break; }

sb.append((char) c);

}

但這永遠不會阻止顯示文本......


查看完整回答
反對 回復 2023-03-17
  • 1 回答
  • 0 關注
  • 106 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號