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

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

怎么實現客戶端與服務器端 不停的相互發消息

//服務器端


package 通訊;


import java.io.BufferedOutputStream;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.PrintStream;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.Scanner;


public class server {

public static void main(String[] args) {

try {


ServerSocket serversocket = new ServerSocket(8888);

System.out.println("正在等待連接。。。。。。。");

Socket socket = serversocket.accept();

while(true){//死循環重復

InputStream is = socket.getInputStream();

InputStreamReader isr = new InputStreamReader(is);

BufferedReader br = new BufferedReader(isr);

String s;

while ((s = br.readLine()) != null) {

System.out.println("客戶端說" + s);

}

socket.shutdownInput();

OutputStream os = socket.getOutputStream();

PrintStream bw = new PrintStream(os);

Scanner input = new Scanner(System.in);

System.out.println("你想對對面的客戶機說些什么");

bw.print(input.next());//從鍵盤輸入讀取一行打印到輸出流

bw.flush();

socket.shutdownOutput();

bw.close();

os.close();

br.close();

isr.close();

is.close();


}


} catch (IOException e) {

e.printStackTrace();

}


}


}



//客戶端

package 通訊;


import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.io.PrintStream;

import java.net.Socket;

import java.util.Scanner;


public class client {

public static void main(String[] args) {

try {


Socket socket = new Socket("127.0.0.1", 8888);

while (true) {//死循環重復步驟

OutputStream os = socket.getOutputStream();

PrintStream bw = new PrintStream(os);

Scanner input = new Scanner(System.in);

System.out.println("你想對對面的服務器說些什么");

bw.print(input.next());//從鍵盤輸入讀取一行 打印到輸出流

bw.flush();

socket.shutdownOutput();


InputStream is = socket.getInputStream();

InputStreamReader isr = new InputStreamReader(is);

BufferedReader br = new BufferedReader(isr);

String s;

while ((s = br.readLine()) != null) {

System.out.println("服務器端說:" + s);

}

socket.shutdownInput();


br.close();

isr.close();

is.close();

bw.close();

os.close();

}


} catch (IOException e) {

e.printStackTrace();

}


}

}

為什么這樣寫死循環 在客戶機發給服務器消息 服務器回復后就出現這樣的異常?

怎么修改才正確呢?

http://img1.sycdn.imooc.com//58f4a70900014be107130187.jpg

http://img1.sycdn.imooc.com//58f4a70900017b0f03810228.jpg

http://img1.sycdn.imooc.com//58f4a70a0001e7f403330175.jpg


正在回答

2 回答

錯誤異常意思是socket被關閉了。按你的代碼while(true)死循環里的socket.shutdownOutput();socket.shutdownInput();其實際意思是當前socket的輸入和輸出已經被關閉,不管服務器輸入或客戶端輸出數據都不行了,因此程序會崩掉。

按照一樓的回答,就是要在while循環里把這兩句代碼刪了就可以;或者我的另一個想法就是把Socket socket = new Socket("127.0.0.1", 8888);這句代碼放進while循環中,讓它每循環一次都建新的socket對象,但這種做法較耗內存資源。


0 回復 有任何疑惑可以回復我~
ServerSocket?serversocket?=?new?ServerSocket(8888);
System.out.println("正在等待連接。。。。。。。");
Socket?socket?=?serversocket.accept();
while(true){//死循環重復
InputStream?is?=?socket.getInputStream();
InputStreamReader?isr?=?new?InputStreamReader(is);
BufferedReader?br?=?new?BufferedReader(isr);
String?s;
while?((s?=?br.readLine())?!=?null)?{
System.out.println("客戶端說"?+?s);
}
socket.shutdownInput();

提前關閉了一次socket.刪除這行試試

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

舉報

0/150
提交
取消

怎么實現客戶端與服務器端 不停的相互發消息

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

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

幫助反饋 APP下載

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

公眾號

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