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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

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

看評(píng)論很多都說(shuō)了這個(gè)問(wèn)題,但是我的情況完全不一樣(寫(xiě)得和他們的代碼一樣還是會(huì)報(bào)錯(cuò))

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

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

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

2.這樣調(diào)試下來(lái)運(yùn)行不再報(bào)錯(cuò),但是直接運(yùn)行依然報(bào)錯(cuò),這是因?yàn)榭蛻?hù)端還沒(méi)有來(lái)得及讀取,服務(wù)器相關(guān)關(guān)閉代碼就已經(jīng)開(kāi)始運(yùn)行了,從而報(bào)錯(cuò),所以需要在關(guān)閉前加個(gè)等待時(shí)間。

我的代碼如下:

服務(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ù)器已啟動(dòng),開(kāi)始監(jiān)聽(tīng)=========");
????????????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ù)器,從客戶(hù)端收到消息:"?+?str);
????????????}
????????????accept.shutdownInput();
????????????//響應(yīng)給客戶(hù)端
????????????OutputStream?outputStream?=?accept.getOutputStream();
????????????PrintWriter?pw?=?new?PrintWriter(outputStream);
????????????pw.write("你很帥氣啊");
????????????pw.flush();
???????????accept.shutdownOutput();//如果不加這個(gè),客戶(hù)端一直收不到響應(yīng),直到服務(wù)端關(guān)閉了,客戶(hù)端就報(bào)錯(cuò)了。
????????????try?{
????????????????//如果不設(shè)置等待時(shí)間,服務(wù)端已經(jīng)關(guān)閉了,客戶(hù)端還沒(méi)有來(lái)得及讀取這個(gè)響應(yīng),從而報(bào)錯(cuò)
????????????????System.out.println("先不要關(guān)閉");
????????????????Thread.sleep(5000);
????????????}?catch?(InterruptedException?e)?{
????????????????e.printStackTrace();
????????????}
????????????pw.close();//開(kāi)始關(guān)閉相關(guān)資源,如果前面不加shutdownOutput/等待時(shí)間,則從此處開(kāi)始報(bào)錯(cuò)
????????????outputStream.close();
????????????br.close();
????????????isr.close();
????????????inputStream.close();
????????????accept.close();
????????????serverSocket.close();
????????}?catch?(IOException?e)?{
????????????e.printStackTrace();
????????}
????}
}


客戶(hù)端:

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("用戶(hù)名:小羊,職位:測(cè)試工程師");
????????????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();
????????}
????}
}


雖然這樣能解決問(wèn)題,但是感覺(jué)還是很low,有沒(méi)有什么更加好的辦法,

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

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

正在回答

1 回答

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

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

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

qq_慕沐1549864

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

舉報(bào)

0/150
提交
取消

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

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

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號(hào)

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