當前位置:首頁 » 雲伺服器 » socket中的是伺服器ip嗎

socket中的是伺服器ip嗎

發布時間: 2022-08-19 08:40:26

A. java里socket客戶端怎麼自動綁定伺服器ip

java中的socket客戶端只需用伺服器所在機器的ip以及伺服器的埠作為參數創建一個Socket對象就可以了,客戶端的代碼可以看下實例:
Socket socket = new Socket("168.160.12.42",9998);
或:
Socket socket = new Socket(InetAddress.getLocalHost(),5678); // 向主機名為InetAddress.getLocalHost()的伺服器申請連接

客戶機必須知道有關伺服器的IP地址,對於著一點Java也提供了一個相關的類InetAddress 該對象的實例必須通過它的靜態方法來提供,它的靜態方法主要提供了得到本機IP 和通過名字或IP直接得到InetAddress的方法。

in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(),true);

以上的程序代碼建立了一個Socket對象,這個對象連接到ip地址為168.160.12.42的主機上、埠為9998的伺服器對象。並且建立了輸入流和輸出流,分別對應伺服器的輸出和客戶端的寫入。

B. serversocket()伺服器綁定到特定埠和IP是什麼意思,是伺服器自身的埠和IP,還是客戶端的埠和IP

Socket啊 很久沒碰過了

樓主應該看看Socket的基本概念:

QQ以前是這樣的,第一次通信的時候是從伺服器去做中間轉接的,但後面的通話應該是不經過伺服器的。

聊天工具應該是即帶有服務端的功能(監聽對應的埠,不用IP哦,應該服務端的IP就是你自己網卡的IP嘛,還需要綁定啥,不是多此一舉么..java也是一樣的,服務端只需綁定埠就可以了)

同時聊天工具也是一個客戶端,因為你必須要把信息發送到對方那裡去,這里你就需要知道對方的IP和埠了。

你這個程序應該帶有幾個功能:
1.廣播
2.客戶端
3.服務端
就像飛秋那樣子

還有就是建議你先看看Socket編程的書,用不了多久時間的,總比在這SB等人答你問題好啊,知識還是要靠自己

C. java的Socket里的client端有個構造方法Socket(String host,...),host是ip,那這個ip是遠程服務端的ip

當然是伺服器的ip了~
Socket s=new Socket("127.0.0.1",5000);
把這個127.0.0.1換成連接的主機的ip 5000是埠

D. socket由ip地址和什麼組成

埠。
Socket約=IP+埠。舉個例子:如果你想給一個人送個快遞,你就必須的知道那個人住哪個小區,以及在小區中的房間號,在計算機網路通信中,比如兩個QQ賬號發送信息,你首先的知道它在 哪台主機(IP) 上,然後還等知道那台主機的QQ程序的編號(埠)是什麼,否則你發送的信息就傳輸到錯誤的地方了。

E. Java中socket填的ip

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

在JAVA中,我們用 ServerSocket、Socket類創建一個套接字連接,從套接字得到的結果是一個InputStream以及OutputStream對象,以便將連接作為一個IO流對象對待。通過IO流可以從流中讀取數據或者寫數據到流中,讀寫IO流會有異常IOException產生。

套接字或插座(socket)是一種軟體形 式的抽象,用於表達兩台機器間一個連接的「終端」。針對一個特定的連接,每台機器上都有一個「套接字」,可以想像它們之間有一條虛擬的「線纜」。JAVA 有兩個基於數據流的套接字類:ServerSocket,伺服器用它「偵聽」進入的連接;Socket,客戶端用它初始一次連接。偵聽套接字只能接收新的 連接請求,不能接收實際的數據包,即ServerSocket不能接收實際的數據包。
套接字是基於TCP/IP實現的,它是用來提供一個訪問TCP的服務介面,或者說套接字socket是TCP的應用編程介面API,通過它應用層就可以訪問TCP提供的服務。
在JAVA中,我們用 ServerSocket、Socket類創建一個套接字連接,從套接字得到的結果是一個InputStream以及OutputStream對象,以便 將連接作為一個IO流對象對待。通過IO流可以從流中讀取數據或者寫數據到流中,讀寫IO流會有異常IOException產生。
套接字底層是基於TCP的,所以socket的超時和TCP超時是相同的。下面先討論套接字讀寫緩沖區,接著討論連接建立超時、讀寫超時以及JAVA套接字編程的嵌套異常捕獲和一個超時例子程序的抓包示例。
1 socket讀寫緩沖區
一旦創建了一個套接字實例,操作系統就會為其分配緩沖區以存放接收和要發送的數據。

JAVA可以設置讀寫緩沖區的大小-setReceiveBufferSize(int size), setSendBufferSize(int size)。
向輸出流寫數據並不意味著數據實際上已經被發送,它們只是被復制到了發送緩沖區隊列SendQ,就是在Socket的OutputStream上調用 flush()方法,也不能保證數據能夠立即發送到網路。真正的數據發送是由操作系統的TCP協議棧模塊從緩沖區中取數據發送到網路來完成的。
當有數據從網路來到時,TCP協議棧模塊接收數據並放入接收緩沖區隊列RecvQ,輸入流InputStream通過read方法從RecvQ中取出數據。
2 socket連接建立超時
socket連接建立是基於TCP的連接建立過程。TCP的連接需要通過3次握手報文來完成,開始建立TCP連接時需要發送同步SYN報文,然後等待確認 報文SYN+ACK,最後再發送確認報文ACK。TCP連接的關閉通過4次揮手來完成,主動關閉TCP連接的一方發送FIN報文,等待對方的確認報文;被 動關閉的一方也發送FIN報文,然等待確認報文。
正在等待TCP連接請求的一端有一個固定長度的連接隊列,該隊列中的連接已經被TCP接受(即三次握手已經完成),但還沒有被應用層所接受。TCP接受一個連接是將其放入這個連接隊列,而應用層接受連接是將其從該隊列中移出。應用層可以通過設置backlog變數來指明該連接隊列的最大長度,即已被TCP接受而等待應用層接受的最大連接數。

當一個連接請求SYN到達時,TCP確定是否接受這個連接。如果隊列中還有空間,TCP模塊將對SYN進行確認並完成連接的建立。但應用層只有在三次握手中的第三個報文收到後才會知道這個新連接。如果隊列沒有空間,TCP將不理會收到的SYN。
如果應用層不能及時接受已被TCP接受的連接,這些連接可能占滿整個連接隊列,新的連接請求可能不被響應而會超時。如果一個連接請求SYN發送後,一段時間後沒有收到確認SYN+ACK,TCP會重傳這個連接請求SYN兩次,每次重傳的時間間隔加倍,在規定的時間內仍沒有收到SYN+ACK,TCP將放棄這個連接請求,連接建立就超時了。
JAVA Socket連接建立超時和TCP是相同的,如果TCP建立連接時三次握手超時,那麼導致Socket連接建立也就超時了。可以設置Socket連接建立的超時時間-
connect(SocketAddress endpoint, int timeout)
如果在timeout內,連接沒有建立成功,在TimeoutException異常被拋出。如果timeout的值小於三次握手的時間,那麼Socket連接永遠也不會建立。
不同的應用層有不同的連接建立過程,Socket的連接建立和TCP一樣-僅僅需要三次握手就完成連接,但有些應用程序需要交互很多信息後才能成功建立連接,比如Telnet協議,在TCP三次握手完成後,需要進行選項協商之後,Telnet連接才建立完成。
3 socket讀超時
如果輸入緩沖隊列RecvQ中沒有數據,read操作會一直阻塞而掛起線程,直到有新的數據到來或者有異常產生。調用setSoTimeout(int timeout)可以設置超時時間,如果到了超時時間仍沒有數據,read會拋出一個SocketTimeoutException,程序需要捕獲這個異 常,但是當前的socket連接仍然是有效的。
如果對方進程崩潰、對方機器突然重啟、網路斷開,本端的read會一直阻塞下去(由前面可知:雙方要關閉連接需要四次揮手 .對方機重啟或斷開只是對方機的TCP連接關閉,本端的TCP連接還沒關閉,所以本端機會一直阻塞),這時設置超時時間是非常重要的,否則調用read的線程會一直掛起。
TCP模塊把接收到的數據放入RecvQ中,直到應用層調用輸入流的read方法來讀取。如果RecvQ隊列被填滿了,這時TCP會根據滑動窗口機制通知 對方不要繼續發送數據,本端停止接收從對端發送來的數據,直到接收者應用程序調用輸入流的read方法後騰出了空間。
4 socket寫超時
socket的寫超時是基於TCP的超時重傳。超時重傳是TCP保證數據可靠性傳輸的一個重要機制,其原理是在發送一個數據報文後就開啟一個計時器,在一 定時間內如果沒有得到發送報文的確認ACK,那麼就重新發送報文。如果重新發送多次之後,仍沒有確認報文,就發送一個復位報文RST,然後關閉TCP連 接。首次數據報文發送與復位報文傳輸之間的時間差大約為9分鍾,也就是說如果9分鍾內沒有得到確認報文,就關閉連接。但是這個值是根據不同的TCP協議棧 實現而不同。
如果發送端調用write持續地寫出數據,直到SendQ隊列被填滿。如果在SendQ隊列已滿時調用write方法,則write將被阻塞,直到 SendQ有新的空閑空間為止,也就是說直到一些位元組傳輸到了接收者套接字的RecvQ中。如果此時RecvQ隊列也已經被填滿,所有操作都將停止,直到 接收端調用read方法將一些位元組傳輸到應用程序。
當Socket的write發送數據時,如果網線斷開、對端進程崩潰或者對端機器重啟動,(由前面可知:雙方要關閉連接需要四次揮手 .對端進程崩潰或者對端機器重啟動只是對方機的TCP連接關閉,本端的TCP連接還沒關閉,所以本端機會一直阻塞)TCP模塊會重傳數據,最後超時而關閉連接。下次如再調用write會導致一個異常而退出。
Socket寫超時是基於TCP協議棧的超時重傳機制,一般不需要設置write的超時時間,也沒有提供這種方法。
5 雙重嵌套異常捕獲
如果ServerSocket、Socket構造失敗,只需要僅僅捕獲這個構造失敗異常而不需要調用套接字的close方法來釋放資源(必須保證構造失敗 後不會留下任何需要清除的資源),因為這時套接字內部資源沒有被成功分配。如果構造成功,必須進入一個try finally語句塊里調用close釋放套接字。請參照下面例子程序。
import java.net.*;
import java.io.*;
public class SocketClientTest
{
public static final int PORT = 8088;
public static void main( String[] args ) throws Exception
{
InetAddress addr = InetAddress.getByName( "127.0.0.1" );
Socket socket = new Socket();
try
{
socket.connect( new InetSocketAddress( addr, PORT ), 30000 );
socket.setSendBufferSize(100);

BufferedWriter out = new BufferedWriter( new OutputStreamWriter( socket.getOutputStream() ) );
int i = 0;

while( true )
{
System.out.println( "client sent --- hello *** " + i++ );
out.write( "client sent --- hello *** " + i );
out.flush();

Thread.sleep( 1000 );
}
}
finally
{
socket.close();
}
}
}

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketServerTest
{
public static final int PORT = 8088;
public static final int BACKLOG = 2;
public static void main( String[] args ) throws IOException
{
ServerSocket server = new ServerSocket( PORT, BACKLOG );
System.out.println("started: " + server);
try
{
Socket socket = server.accept();
try
{
BufferedReader in = new BufferedReader( new InputStreamReader( socket.getInputStream() ) );
String info = null;

while( ( info = in.readLine() ) != null )
{
System.out.println( info );
}
}
finally
{
socket.close();
}
}
finally
{
server.close();
}
}
}

F. socket中bind函數綁定的IP是什麼

bind是服務端調用的函數,綁定的是服務端的IP,假設服務端有多個網卡,即會有多個IP,這個時候我們可以選擇用bind綁定其中一個IP,那麼服務端只接收該IP上某埠的數據。
如果bind綁定的是INADDR_ANY,即表示所有發送到伺服器的這個埠,不管是哪個網卡/哪個IP地址接收到的數據,都由這個服務端進程進行處理。

G. socket是什麼呀

套接字(Socket),就是對網路中不同主機上的應用進程之間進行雙向通信的端點的抽象。

一個套接字就是網路上進程通信的一端,提供了應用層進程利用網路協議交換數據的機制。從所處的地位來講,套接字上聯應用進程,下聯網路協議棧,是應用程序通過網路協議進行通信的介面,是應用程序與網路協議根進行交互的介面。

套接字是通信的基石,是支持TCP/IP協議的路通信的基本操作單元。

可以將套接字看作不同主機間的進程進行雙間通信的端點,它構成了單個主機內及整個網路間的編程界面。套接字存在於通信域中,通信域是為了處理一般的線程通過套接字通信而引進的一種抽象概念。

套接字通常和同一個域中的套接字交換數據(數據交換也可能穿越域的界限,但這時一定要執行某種解釋程序),各種進程使用這個相同的域互相之間用Internet協議簇來進行通信。

Socket(套接字)可以看成是兩個網路應用程序進行通信時,各自通信連接中的端點,這是一個邏輯上的概念。它是網路環境中進程間通信的API(應用程序編程介面),也是可以被命名和定址的通信端點,使用中的每一個套接字都有其類型和一個與之相連進程。

通信時其中一個網路應用程序將要傳輸的一段信息寫入它所在主機的 Socket中,該 Socket通過與網路介面卡(NIC)相連的傳輸介質將這段信息送到另外一台主機的 Socket中,使對方能夠接收到這段信息。

Socket是由IP地址和埠結合的,提供向應用層進程傳送數據包的機制。

類型

1、數據報套接字

無連接套接字,使用用戶數據報協議(UDP)。在數據報套接字上發送或接收的每個數據包都單獨定址和路由。數據報套接字不能保證順序和可靠性,因此從一台機器或進程發送到另一台機器或進程的多個數據包可能以任何順序到達或可能根本不到達。在數據報套接字上發送廣播可能需要特殊配置。

為了接收廣播數據包,數據報套接字不應該綁定到特定地址,盡管在某些實現中,當數據報套接字綁定到特定地址時也可能接收廣播數據包。

2、流套接字

面向連接的套接字,使用傳輸控制協議(TCP)、流控制傳輸協議(SCTP) 或數據報擁塞控制協議(DCCP)。流套接字提供了無記錄邊界的有序且獨特的無錯誤數據流,並具有用於創建和銷毀連接以及報告錯誤的明確定義的機制。

流套接字以帶外功能可靠地、有序地傳輸數據。在 Internet 上,流套接字通常使用 TCP 實現,以便應用程序可以使用 TCP/IP 協議在任何網路上運行。

3、原始套接字

允許直接發送和接收 IP 數據包,無需任何特定於協議的傳輸層格式。對於其他類型的套接字,根據選擇的傳輸層協議(例如 TCP、UDP)自動封裝有效載荷,並且套接字用戶不知道與有效載荷一起廣播的協議頭的存在。從原始套接字讀取時,通常包含標頭。

從原始套接字傳輸數據包時,自動添加標頭是可選的。

大多數套接字應用程序編程介面(API),例如基於Berkeley 套接字的那些,支持原始套接字。Windows XP於 2001 年發布,在Winsock介面中實現了原始套接字支持,但三年後,微軟出於安全考慮限制了 Winsock 的原始套接字支持。

原始套接字用於與安全相關的應用程序,如Nmap。原始套接字的一個用例是在用戶空間中實現新的傳輸層協議。

原始套接字通常在網路設備中可用,用於路由協議,例如Internet 組管理協議(IGMP) 和開放最短路徑優先(OSPF),以及用於Internet 控制消息協議(ICMP) 等事情,由ping 實用程序。

以上內容參考網路-套接字

H. 網路中的socket是什麼意思,它與埠和IP地址到底是什麼關系啊~謝謝

三者從本質上來說沒有可比性,
socket則是對TCP/IP協議的封裝和應用(程序員層面上)。
也可以說,TPC/IP協議是傳輸層協議,主要解決數據如何在網路中傳輸,
而HTTP是應用層協議,主要解決如何包裝數據。
關於TCP/IP和HTTP協議的關系,網路有一段比較容易理解的介紹:
「我們在傳輸數據時,可以只使用(傳輸層)TCP/IP協議,但是那樣的話,如果沒有應用層,便無法識別數據內容。
如果想要使傳輸的數據有意義,則必須使用到應用層協議。
應用層協議有很多,比如HTTP、FTP、TELNET等,也可以自己定義應用層協議。
WEB使用HTTP協議作應用層協議,以封裝HTTP文本信息,然後使用TCP/IP做傳輸層協議將它發到網路上。」
而我們平時說的最多的socket是什麼呢,實際上socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個調用介面(API)。
通過Socket,我們才能使用TCP/IP協議。
實際上,Socket跟TCP/IP協議沒有必然的聯系。
Socket編程介面在設計的時候,就希望也能適應其他的網路協議。
所以說,Socket的出現只是使得程序員更方便地使用TCP/IP協議棧而已,是對TCP/IP協議的抽象,
從而形成了我們知道的一些最基本的函數介面,比如create、listen、connect、accept、send、read和write等等。
網路有一段關於socket和TCP/IP協議關系的說法比較容易理解:
「TCP/IP只是一個協議棧,就像操作系統的運行機制一樣,必須要具體實現,同時還要提供對外的操作介面。
這個就像操作系統會提供標準的編程介面,比如win32編程介面一樣,
TCP/IP也要提供可供程序員做網路開發所用的介面,這就是Socket編程介面。」
關於TCP/IP協議的相關只是,用博大精深來講我想也不為過,單單查一下網上關於此類只是的資料和書籍文獻的數量就知道,

I. socket工作與TCP/IP的哪一層

傳輸層

要想明白 Socket,必須要理解 TCP 連接。

TCP 三次握手:握手過程中並不傳輸數據,在握手後伺服器與客戶端才開始傳輸數據,理想狀態下,TCP 連接一旦建立,在通訊雙方中的任何一方主動斷開連接之前 TCP 連接會一直保持下去。

Socket是對 TCP/IP 協議的封裝,Socket 只是個介面不是協議,通過 Socket 我們才能使用 TCP/IP 協議,除了 TCP,也可以使用 UDP 協議來傳遞數據。

創建 Socket連接的時候,可以指定傳輸層協議,可以是 TCP 或者 UDP,當用 TCP 連接,該Socket就是個TCP連接,反之。

Socket原理

Socket連接,至少需要一對套接字,分為 clientSocket,serverSocket

連接分為3個步驟:

(1) 伺服器監聽:伺服器並不定位具體客戶端的套接字,而是時刻處於監聽狀態;

(2) 客戶端請求:客戶端的套接字要描述它要連接的伺服器的套接字,提供地址和埠號,然後向伺服器套接字提出連接請求;

(3) 連接確認:當伺服器套接字收到客戶端套接字發來的請求後,就響應客戶端套接字的請求,並建立一個新的線程,把伺服器端的套接字的描述發給客戶端。一旦客戶端確認了此描述,就正式建立連接。而伺服器套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連接請求.

Socket為長連接:通常情況下Socket 連接就是 TCP 連接,因此 Socket 連接一旦建立,通訊雙方開始互發數據內容,直到雙方斷開連接。在實際應用中,由於網路節點過多,在傳輸過程中,會被節點斷開連接,因此要通過輪詢高速網路,該節點處於活躍狀態。

很多情況下,都是需要伺服器端向客戶端主動推送數據,保持客戶端與服務端的實時同步。

若雙方是 Socket 連接,可以由伺服器直接向客戶端發送數據。

若雙方是 HTTP 連接,則伺服器需要等客戶端發送請求後,才能將數據回傳給客戶端。

因此,客戶端定時向伺服器端發送請求,不僅可以保持在線,同時也詢問伺服器是否有新數據,如果有就將數據傳給客戶端。

參考來源:

HTTP 和 Socket 的區別

HTTP與 Socket 的區別


OSI七層協議模型、TCP/IP四層模型學習筆記

熱點內容
idalinux 發布:2024-04-27 13:23:41 瀏覽:27
浙江稅務登陸密碼是多少 發布:2024-04-27 13:22:55 瀏覽:493
動感單車哪個配置好 發布:2024-04-27 13:09:49 瀏覽:831
vb開文件夾 發布:2024-04-27 13:09:46 瀏覽:778
美團商家新增的技術伺服器是什麼 發布:2024-04-27 12:12:35 瀏覽:343
得到腳本 發布:2024-04-27 12:06:25 瀏覽:936
三星手機鎖屏忘記密碼了怎麼辦 發布:2024-04-27 12:05:41 瀏覽:519
python基礎語言 發布:2024-04-27 11:54:40 瀏覽:84
ioshttp伺服器搭建 發布:2024-04-27 11:40:26 瀏覽:913
忘記密碼如何強制刷機vivo 發布:2024-04-27 11:28:40 瀏覽:385