Ⅰ java socket 阻塞和非阻塞 會對數據傳輸有什麼影響
阻塞會導致你的程序停在這里不往下走 非阻塞時,你的程序可以一邊干其他事情(比如顯示個進度條),以便等數據過來。
Ⅱ java編程中,Socket通信是怎麼實現的
java編程對於Socket之間的通信過程如下:
服務端往Socket的輸出流裡面寫東西,客戶端就可以通過Socket的輸入流讀取對應的內容。Socket與Socket之間是雙向連通的,所以客戶端也可以往對應的Socket輸出流裡面寫東西,然後服務端對應的Socket的輸入流就可以讀出對應的內容。下面來看一些服務端與客戶端通信的例子:
publicclassServer{
publicstaticvoidmain(Stringargs[])throwsIOException{
//為了簡單起見,所有的異常信息都往外拋
intport=8899;
//定義一個ServerSocket監聽在埠8899上
ServerSocketserver=newServerSocket(port);
//server嘗試接收其他Socket的連接請求,server的accept方法是阻塞式的
Socketsocket=server.accept();
//跟客戶端建立好連接之後,我們就可以獲取socket的InputStream,並從中讀取客戶端發過來的信息了。
Readerreader=newInputStreamReader(socket.getInputStream());
charchars[]=newchar[64];
intlen;
StringBuildersb=newStringBuilder();
while((len=reader.read(chars))!=-1){
sb.append(newString(chars,0,len));
}
System.out.println("fromclient:"+sb);
reader.close();
socket.close();
server.close();
}
}
客戶端代碼
Java代碼publicclassClient{
publicstaticvoidmain(Stringargs[])throwsException{
//為了簡單起見,所有的異常都直接往外拋
Stringhost="127.0.0.1";//要連接的服務端IP地址
intport=8899;//要連接的服務端對應的監聽埠
//與服務端建立連接
Socketclient=newSocket(host,port);
//建立連接後就可以往服務端寫數據了
Writerwriter=newOutputStreamWriter(client.getOutputStream());
writer.write("HelloServer.");
writer.flush();//寫完後要記得flush
writer.close();
client.close();
}
}
Ⅲ java SOCKET編程 ,如何跳出accept() 阻塞
首先你這個邏輯就有問題
你如果想先將數據發給客戶端,那麼必須要讓客戶端先連接到服務端,你才能進行發送對吧
那麼你就可以把這個總是細分,第一步,客戶端連接到用器,這時候你的伺服器才能向客戶端發送資料庫,第二步客戶端處理完服務端的數據,再次向服務端發送數據
另外,你服務端應該用多線程進行交互
即一發現有客戶端連接
就立馬啟動一條線程來處理請求
Ⅳ java socket 服務端接收數據阻塞。
伺服器端處理的太慢了吧?
Ⅳ JAVA socket傳送文件一直被阻塞
是不能等於-1撒..
他在等你那邊給他寫東西呢..
你應該在伺服器端結束的時候給他寫個東西過去..讓他知道已經結束了..
還有什麼問題HI我哈
但是read方法本身不就有告知客戶端文件傳送結束的功能么 當讀到文件結束符的時候它會返回-1的啊
確實讀文件結束就是-1...
但是你的客戶端讀的不是文件啊..伺服器才是讀文件..所以伺服器能正常結束..
你的客戶端讀的伺服器發來的東西..伺服器讀文件結束後就不給客戶端發信息了..
而客戶端的read()方法是阻塞式方法..意思就是伺服器不傳給他數據他就會一直等..
所以還是那樣..在伺服器端結束的時候給客戶端發個消息說明已經結束了..客戶端讀到這個結束標志的時候也就不要再往文件裡面寫東西了..也結束..這樣你的程序就正確了..
Ⅵ JAVA socket聊天室程序 readLine()阻塞
對每一個客戶端都建立一個線程來接收消息,發消息與接消息不要在同一線程上,那就才能解決阻塞問題。一般新手用socket編程,大都是遇到阻塞問題不懂解決,導致了收發消息失敗。其實網上socket聊天通訊的例子大把,遇到問題查查看,思考下就能明白了。
有問題歡迎提問,滿意請採納,thx.