第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

java.net.SocketException: Connection reset,解決辦法

看評論很多都說了這個問題,但是我的情況完全不一樣(寫得和他們的代碼一樣還是會報錯)

https://img1.sycdn.imooc.com//5ba9dad600011a1a07360341.jpg

經(jīng)過調(diào)試發(fā)現(xiàn),需要修改兩個地方:

1.當服務(wù)器響應(yīng)客戶端時,需要在響應(yīng)信息輸完后加入 socket.shutdownOutput(),代表這個響應(yīng)內(nèi)容已經(jīng)輸完了,這時才會發(fā)送給客戶端讀取這個響應(yīng)

2.這樣調(diào)試下來運行不再報錯,但是直接運行依然報錯,這是因為客戶端還沒有來得及讀取,服務(wù)器相關(guān)關(guān)閉代碼就已經(jīng)開始運行了,從而報錯,所以需要在關(guān)閉前加個等待時間。

我的代碼如下:

服務(wù)端:

package?com.socket.socketsender.socketTest;

import?java.io.*;
import?java.net.ServerSocket;
import?java.net.Socket;

public?class?Server?{

????public?static?void?main(String[]?args)??{
????????try?{
????????????ServerSocket?serverSocket?=?new?ServerSocket(8888);
????????????System.out.println("=======服務(wù)器已啟動,開始監(jiān)聽=========");
????????????Socket?accept?=?serverSocket.accept();
????????????InputStream?inputStream?=?accept.getInputStream();
????????????InputStreamReader?isr?=?new?InputStreamReader(inputStream);
????????????BufferedReader?br?=?new?BufferedReader(isr);
????????????String?str?=?null;
????????????while?((str?=?br.readLine())?!=?null)?{
????????????????System.out.println("我是服務(wù)器,從客戶端收到消息:"?+?str);
????????????}
????????????accept.shutdownInput();
????????????//響應(yīng)給客戶端
????????????OutputStream?outputStream?=?accept.getOutputStream();
????????????PrintWriter?pw?=?new?PrintWriter(outputStream);
????????????pw.write("你很帥氣啊");
????????????pw.flush();
???????????accept.shutdownOutput();//如果不加這個,客戶端一直收不到響應(yīng),直到服務(wù)端關(guān)閉了,客戶端就報錯了。
????????????try?{
????????????????//如果不設(shè)置等待時間,服務(wù)端已經(jīng)關(guān)閉了,客戶端還沒有來得及讀取這個響應(yīng),從而報錯
????????????????System.out.println("先不要關(guān)閉");
????????????????Thread.sleep(5000);
????????????}?catch?(InterruptedException?e)?{
????????????????e.printStackTrace();
????????????}
????????????pw.close();//開始關(guān)閉相關(guān)資源,如果前面不加shutdownOutput/等待時間,則從此處開始報錯
????????????outputStream.close();
????????????br.close();
????????????isr.close();
????????????inputStream.close();
????????????accept.close();
????????????serverSocket.close();
????????}?catch?(IOException?e)?{
????????????e.printStackTrace();
????????}
????}
}


客戶端:

package?com.socket.socketsender.socketTest;

import?java.io.*;
import?java.net.Socket;
import?java.net.UnknownHostException;

public?class?Client?{

????public?static?void?main(String[]?args)?{
????????try?{
????????????Socket?socket?=?new?Socket("localhost",?8888);
????????????OutputStream?outputStream?=?socket.getOutputStream();
????????????PrintWriter?ps?=?new?PrintWriter(outputStream);
????????????ps.write("用戶名:小羊,職位:測試工程師");
????????????ps.flush();

????????????socket.shutdownOutput();

????????????InputStream?inputStream?=?socket.getInputStream();
????????????BufferedReader?br?=?new?BufferedReader(new?InputStreamReader(inputStream));
????????????String?str?=?null;

????????????while?((str?=?br.readLine())?!=?null)?{
????????????????System.out.println("服務(wù)器給出的響應(yīng)是:"?+?str);
????????????}

????????????br.close();
????????????inputStream.close();
????????????ps.close();
????????????outputStream.close();
????????????socket.close();
????????}?catch?(UnknownHostException?e)?{
????????????e.printStackTrace();
????????}?catch?(IOException?e)?{
????????????e.printStackTrace();
????????}
????}
}


雖然這樣能解決問題,但是感覺還是很low,有沒有什么更加好的辦法,

可以保證客戶端讀到響應(yīng)后服務(wù)端才關(guān)閉?

或者就讓服務(wù)端一直開啟?---我試過把服務(wù)端所有資源關(guān)閉語句注釋掉,但客戶端每發(fā)送一次數(shù)據(jù),服務(wù)端還是會關(guān)閉

正在回答

1 回答

try?{
????????????????//如果不設(shè)置等待時間,服務(wù)端已經(jīng)關(guān)閉了,客戶端還沒有來得及讀取這個響應(yīng),從而報錯
????????????????System.out.println("先不要關(guān)閉");
????????????????Thread.sleep(5000);
????????????}?catch?(InterruptedException?e)?{
????????????????e.printStackTrace();
????????????}

我將你的代碼中這個去掉,客戶端是可以接收到服務(wù)端信息的.

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

qq_慕沐1549864

如果傳輸?shù)膬?nèi)容多一點的話還是會報連接重置的錯。
2019-05-22 回復(fù) 有任何疑惑可以回復(fù)我~

舉報

0/150
提交
取消

java.net.SocketException: Connection reset,解決辦法

我要回答 關(guān)注問題
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號