導航:首頁 > 編程語言 > javatcpipsocket

javatcpipsocket

發布時間:2022-09-10 00:19:15

Ⅰ tcp/ip方式的 socket介面,java能調用不

不太明白說的是什麼,Java的話,只要是socket編程的話,是可以調用你的socket介面,如果是Java調用
c程序
的話,你就要先把c++弄成外置的庫。
希望能幫到你,請採納我的答案。

Ⅱ 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 網路編程,有哪些比較好的書推薦

Java 網路編程,比較好的書:
ava TCPIP Socket編程(中文版) Java NIO (中文版) 中文的好理解

java 7 出了AIO 你有必要去網路了解下

Ⅳ java socket中的IP地址問題

127.0.0.1是表示自己本地IP ,也可以用localhost代替. socket編程也叫套接字編程.java里的socket我沒用過,不過c#的倒看過! 通過tcp/ip連接的程序需要兩個條件,IP和埠,然後通過SOCKET里的方法把他們轉成16進制的套接字.另外是UDP式的,就是後來流行的P2P技術,不需要IP的套接字!

Ⅳ java socke編程中,scokt是基於tcp/ip,有這么段話是什麼意思

應用層協議有http,SMTP,Telnet等,這些http協議是建立在tcp協議之上的,socket是對tcp/ip協議的封裝,socket本身並不是協議,他只是對tcp/ip的抽象,是一個api,通過socket我們才能使用tcp/ip協議。不知道這樣說樓主明白了沒?

Ⅵ JAVA Socket 底層是怎樣基於TCP/IP 實現的

首先必須明確:TCP/IP模型中有四層結構: 應用層(Application Layer)、傳輸層(Transport Layer)、網路層(Internet Layer
)、鏈路層(LinkLayer)
其中Ip協議(Internet Protocol)是位於網路層的,TCP協議時位於傳輸層的。通過Ip協議可以使可以使兩台計算機使用同一種語言,從而允許Internet上連接不同類型的計算機和不同操作系統的網路。Ip協議只保證計算機能夠接收和發送分組數據。當計算機要和遠程的計算機建立連接時,TCP協議會讓他們建立連接:用於發送和接收數據的虛擬電路。

套接字或插座(socket)是一種軟體形式的抽象,用於表達兩台機器間一個連接的「終端」。針對一個特定的連接,每台機器上都有一個「套接字」,可以想像它們之間有一條虛擬的「線纜」。JAVA
有兩個基於數據流的套接字類:ServerSocket,伺服器用它「偵聽」進入的連接;Socket,客戶端用它初始一次連接。偵聽套接字只能接收新的連接請求,不能接收實際的數據包,即ServerSocket不能接收實際的數據包。
套接字是基於TCP/IP實現的,它是用來提供一個訪問TCP的服務介面,或者說套接字socket是TCP的應用編程介面API,通過它應用層就可以訪問TCP提供的服務。
在JAVA中,我們用 ServerSocket、Socket類創建一個套接字連接,從套接字得到的結果是一個InputStream以及OutputStream對象,以便將連接作為一個IO流對象對待。通過IO流可以從流中讀取數據或者寫數據到流中,讀寫IO流會有異常IOException產生。

Ⅶ java中,用哪一個類來表示tcp協議的伺服器socket對象

服務端監聽:ServerSocket server=new ServerSocket(port);//port:綁定的埠號
Socket client=server.accept();//監聽埠,一旦取得連接則獲得客戶端的socket連接對象client

客戶端: Socket s=new Socket(ip,port);//要連接的伺服器的ip以及埠號

如果正常連接上之後,socket的對象可以獲得InputStream和OutputStreame,然後就可以進行通信了

完成通信之後,執行socket對象的close()方法關閉連接,完成一次完整的socket連接

Ⅷ JAVA socket基於TCP/IP協議編程,是這樣寫的JAVA代碼,伺服器端:I/O流和server

http://www.cnblogs.com/linzheng/archive/2011/01/23/1942328.html 對照的例子 親手寫一個 好好閱讀文檔 很容易就學會了

Ⅸ Java TCP/IP協議的Socket如何設置埠復用

你的其中一端的連接沒有被及時釋放掉的原因是:你沒有順利地進行TCP連接關閉的流程。最近我就因為這個問題頭疼了好久,現在終於找到真正的原因和解決辦法了!關鍵點是:在調用close之前先發送一次數據(例如,out.write(0);)。接下來我用通俗的語言來闡述原因。

如果你兩端的程序都是在傳送完數據後直接調用Socket的close方法斷開連接的話,這就會有一個調用close方法誰先誰後的問題,先調用者是主動關閉TCP連接的那一方,而後調用者就是被動關閉TCP連接的那一方。

關閉TCP連接的過程中,雙方總共有3個報文需要發送,主動關閉方只需發送1個報文,就是斷開請求的報文,被動關閉方要發送2個報文,分別是 回應主動關閉方發來的斷開請求報文的第一次確認報文和 第二次確認報文,第二次的確認報文用來確認已經沒有數據需要發送了。

主動關閉方發送了斷開請求報文後,就進入了等待被動關閉方發送確認報文的狀態,一般情況下,被動關閉方馬上就會發送第一次確認報文。主動關閉方收到第一次確認報文後,就會等被動關閉方的第二次確認報文,直到超時,套接字資源被操作系統回收(P.S. 雖然書上不是這么說的,但是實際的OS就是這么處理的,原因下面再說)。此時如果被動關閉方發送了第二次確認報文,整個TCP連接關閉流程就順利結束了,所有資源就會被OS回收。

重點來了,問題在於,作為被動關閉方的程序中,在主動關閉方等待被動關閉方發送第二次確認報文時,就算執行了Socket的close也不會發送第二次確認報文,只有向主動關閉方發送數據(任意)後,被動關閉方才會發送第二次確認報文,整個流程才能順利進行,TCP連接的資源才會被釋放,下次才能重復使用同個套接字。

我自己實驗出來的結果是:在兩端的代碼中(只有一端發送一端接收),都只使用

out.write(0);
me.close();

進行TCP連接的斷開,out是Socket的OutputStream,me是已連接的Socket對象。結果,無論重復多少次運行,都能不間斷地順利運行,每次運行結束後,用資源監視器看TCP連接情況,都看到所使用的連接資源都已經被釋放,並沒有等待2MSL時間後才被釋放,所以實際的OS的處理跟理論上的不一樣。所以你的程序要等一段時間後才能再次使用同個埠並不是因為存在2MSL的等待時間,而是因為TCP連接關閉流程沒有順利進行,但是所使用的進程已經退出,OS就會自動幫你回收資源,不過需要等超時後才處理。(P.S. 我測試的OS是Windows)

如果兩端的程序斷開TCP連接時都是直接開始斷開的過程而沒有延時的話,誰是主動關閉方就不確定,兩端的程序中的斷開TCP連接的代碼就得有發送數據的部分,如果其中有一方延時了,那延時的一方就有很大的概率是被動關閉方,另一方在調用close前就不需要發送數據了。

還有,就算TCP連接關閉的流程順利進行,但是,下次使用同個套接字(兩端套接字跟之前的相同)前得延時一下,幾百毫秒就夠了(具體自己調整),因為OS回收套接字資源是需要時間的,關閉TCP連接後就立馬創建兩端套接字跟所關閉的連接的兩端套接字相同的連接也有可能因為仍然被佔用而報錯。

閱讀全文

與javatcpipsocket相關的資料

熱點內容
美食博主用什麼app拍視頻 瀏覽:812
ipone手機如何加密微信 瀏覽:354
自來水加密閥閥帽 瀏覽:431
華為交換機dhcp配置命令 瀏覽:315
androidbitmap縮小 瀏覽:271
單片機串口控制燈 瀏覽:84
大訊雲伺服器安裝視頻 瀏覽:784
華為演算法領先世界 瀏覽:654
linux路由重啟 瀏覽:566
php的模板編程 瀏覽:320
編譯器原理與實現書 瀏覽:709
dos選擇命令 瀏覽:17
apm固件編譯到單片機 瀏覽:121
聯通深藍卡都包含什麼app 瀏覽:264
如何判斷網路伺服器正常 瀏覽:652
路由器搭橋遠端伺服器地址是什麼 瀏覽:518
編譯動態庫時會連接依賴庫嗎 瀏覽:710
淘寶手機加密是隨機的嗎 瀏覽:675
解壓包子怎麼裝飾 瀏覽:588
四個數湊24演算法 瀏覽:679