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

為了賬號安全,請及時綁定郵箱和手機立即綁定

我想基于老師的代碼,實現聊天的功能,請問該怎么寫啊?

我發覺, 我像老師那樣寫,必須 ?socket.shutdownOutput();

否則,數據根本發不過去。 ?

但是一旦關閉了 輸出流, 又無法重新打開輸出流,從而導致只能輸一次話。。


public?class?Client?{
public?static?void?main(String[]?args)?{
????????try
????????{
????????Socket?socket=new?Socket("localHost",8886);
????????????OutputStream?os?=?socket.getOutputStream();
????????????BufferedWriter?bw=new?BufferedWriter(new?OutputStreamWriter(os));
????????????while?(true)
????????????{
????????????????BufferedReader?reader?=?new?BufferedReader(
????????????????????????new?InputStreamReader(System.in));
????????????????String?line?=?reader.readLine();
????????????????bw.write(line);
????????????????bw.newLine();//添加了寫一行操作,??服務端勉強能接收消息了
????????????????bw.flush();
????????????}
????????}
????????catch?(IOException?e)
????????{
????????????e.printStackTrace();
????????}
????}
}
/*
?*服務端接收
?*/
public?class?Server?{
public?static?void?main(String[]?args)?{
//1.創建一個服務器端Socket,指定綁定端口
try?{
ServerSocket?server=new?ServerSocket(8886);
System.out.println("服務器啟動,等待客戶端連接");
Socket?socket=server.accept();
System.out.println("客戶端連接成功,"+socket.toString());
InputStream?is=socket.getInputStream();
while(true){
InputStreamReader?isr=new?InputStreamReader(is);
BufferedReader?br=new?BufferedReader(isr);
if((br.readLine())!=null){//說是勉強,因為我發覺必須把if語句去掉后,?才能收到消息,請問是怎么回事啊?
System.out.println(br.readLine());
}
}
}?catch?(IOException?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
}
}

1.當客戶端不加newLine()的時候,沒接收到消息過。除非shutdownOutput()才能輸出一次,看了API,關閉輸出流的時候把數據發送過去了。 所以說是沒法過去的原因。\t\n之類的也知道一點,但是,為何加newLine()有機會收到?

2.說是有機會收到,因為我在客戶端加了newLine(),去掉服務端的 If 才能收到,我完全部知道為什么能在客戶端讀到,為什么又讀不到

if((br.readLine())!=null){

System.out.println(br.readLine());

}

感覺沒錯啊, 為啥上面的代碼不能輸出, 去掉If就能輸出了,因為if是有問題可以肯定, 但是具體錯在哪兒了?

3. 如何設置IP才能放在朋友那里執行客戶端, 能夠跟我通信, ?直接百度得到我的IP,但是朋友根本連不上這個IP。

public void newLine()
? ? ? ? ? ? throws IOException

寫入一個行分隔符。行分隔符字符串由系統屬性 line.separator 定義,并且不一定是單個新行 ('\n') 符。?


正在回答

2 回答

用其他包裝流 寫出來了。 但是這個問題還是沒搞懂。

0 回復 有任何疑惑可以回復我~
#1

Mass0

請問您現在搞懂這個問題了嗎?我也遇到了類似的問題,我按照老師的代碼敲得,可是客戶端的console沒有任何反應,服務器端的反應正常。我發現是因為服務器傳回的消息是null 我很奇怪 明明調用了PrintWriter
2016-01-24 回復 有任何疑惑可以回復我~

public class Client {

public static void main(String[] args) {

? ? ? ? try

? ? ? ? {

? ? ? ? Socket socket=new Socket("localHost",8886);

? ? ? ? ? ? OutputStream os = socket.getOutputStream();

? ? ? ? ? ? BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os));


? ? ? ? ? ? while (true)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? BufferedReader reader = new BufferedReader(

? ? ? ? ? ? ? ? ? ? ? ? new InputStreamReader(System.in));

? ? ? ? ? ? ? ? String line = reader.readLine();

? ? ? ? ? ? ? ? bw.write(line);

? ? ? ? ? ? ? ? bw.newLine();//添加了寫一行操作, ?服務端勉強能接收消息了

? ? ? ? ? ? ? ? bw.flush();

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? catch (IOException e)

? ? ? ? {

? ? ? ? ? ? e.printStackTrace();

? ? ? ? }


? ? }

}

/*

?*服務端接收

?*/


public class Server {

public static void main(String[] args) {

//1.創建一個服務器端Socket,指定綁定端口

try {

ServerSocket server=new ServerSocket(8886);

System.out.println("服務器啟動,等待客戶端連接");

Socket socket=server.accept();

System.out.println("客戶端連接成功,"+socket.toString());

InputStream is=socket.getInputStream();

while(true){

InputStreamReader isr=new InputStreamReader(is);

BufferedReader br=new BufferedReader(isr);

if((br.readLine())!=null){//說是勉強,因為我發覺必須把if語句去掉后, 才能收到消息,請問是怎么回事啊?

System.out.println(br.readLine());

}

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

  1. 當客戶端不加newLine()的時候,沒接收到消息過。除非shutdownOutput()才能輸出一次,看了API,關閉輸出流的時候把數據發送過去了。 所以說是沒法過去的原因。\t\n之類的也知道一點,但是,為何加newLine()有機會收到?

  2. 說是有機會收到,因為我在客戶端加了newLine(),去掉服務端的 If 才能收到,我完全部知道為什么能在客戶端讀到,為什么又讀不到

    if((br.readLine())!=null){

    System.out.println(br.readLine());

    }

    感覺沒錯啊, 為啥上面的代碼不能輸出, 去掉If就能輸出了,因為if是有問題可以肯定, 但是具體錯在哪兒了?


public void newLine()
? ? ? ? ? ? throws IOException

寫入一個行分隔符。行分隔符字符串由系統屬性 line.separator 定義,并且不一定是單個新行 ('\n') 符。?


0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

我想基于老師的代碼,實現聊天的功能,請問該怎么寫???

我要回答 關注問題
微信客服

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

幫助反饋 APP下載

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

公眾號

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