Java中Socket通訊的基本方法

2021-07-09 18:33:05 字數 2537 閱讀 6574

建立socket連線到server

socket chatsocket = new socket("127.0.0.1", 5000);
建立socket的時候需要用到兩個重要的引數,乙個是ip位址,另外乙個是埠號。ip位址可以理解成網路中特定位置的計算機(伺服器相當於一台連續工作的計算機),埠號對應於計算機中特定的服務或者應用。

這裡的ip位址127.0.0.1是本機回送位址,屬於保留位址,專門用來測試的。埠號可以在1024~65535之間任選。

建立inputstreamreader與底層socket的輸入流連線

這裡從socket中讀取字元與從檔案中讀取字元的方法其實是一樣的:

inputstreamreader stream = new inputstreamreader(chatsocket.getinputstream());
inputstreamreader在底層二進位制位元組流和上層的字串流之間建立了一座「橋梁」。

建立bufferedreader讀取字串

bufferedreader reader = new bufferedreader(stream);

string message = reader.readline();

將bufferedreader連線到inputstreamreader。

向socket中寫入資料,也就是要將資料傳送到伺服器上

建立socket連線到server

第一步與前面完全相同:

socket chatsocket = new socket("127.0.0.1", 5000);
建立printwriter連線到底層的輸出流
printwriter writer = new printwriter(charsocket.getoutputstream());
同樣,printwriter在自己與底層輸出流之間建立了一座「橋梁」,所以我們只需要向其寫入string型別的字串,就能自動轉變為輸出的二進位製流。

寫入字元

writer.println("message to send");

writer.print("message to send");

println()方法會插入乙個新行,而print()方法不會。

下面是乙個簡單的例子,客戶端從伺服器讀取資料,並列印到控制台

public

class

dailyadviceclient catch (unknownhostexception e) catch (ioexception e)

}public

static

void

main(string args)

}

serversocket serversocket = new serversocket(4242);
建立後,伺服器開始監聽埠4242上的請求。

2. 客戶端建立socket與伺服器連線

socket socket = new socket("190.165.1.103", 4242);
socket socket = serversocket.accept();
伺服器呼叫accept()方法後,進入阻塞狀態,等待客戶端的連線。當收到客戶端的請求後,伺服器會在另外的埠建立乙個新的socket與客戶端進行通訊,這樣原埠就可以空出來等待下一次請求。

**如下:

public

class

dailyadviceserver ;

public

void

go()

} catch (ioexception e)

}private string getadvice()

public

static

void

main(string args)

}

注意,我們將accept()方法的呼叫放在了乙個死迴圈中,只有伺服器接收到了客戶端的請求,迴圈才會繼續往下執行。這時候accept()方法返回了乙個新的socket,用來與客戶端進行通訊。如果想同時處理多個請求,應當為每乙個socket新建乙個執行緒。

Java 非阻塞 socket 通訊

前幾天我們公司c語言組的人需要乙個基於socket的報文接收器來方便他們測試專案,我花了小半天給他們做了個多執行緒的socket服務端,我寫好後在本機上測試後交給了他們,但是他們那邊能連上伺服器端,但是傳送訊息時沒響應,後來我看到他們用的都是tcp ip測試工具 乙個c s結構的socket除錯工具...

java通訊 套接字Socket

無論用什麼語言開發,socket都是繞不過去的乙個環節,若以簡單論,除了檔案操作,程序間通過socket通訊還是比較方便的。對於主機a和b,若a主機想向b主機傳送資訊,那麼基本步驟如下 1.首先確保b主機上socket服務端開啟,服務端會監聽本機上的乙個埠,例如8080。socket服務端會以阻塞形...

Qt中的Socket通訊

qt中的socket通訊 qt中提供的所有的socket類都是非阻塞的。qt中常用的用於socket通訊的套接字類 tcpserver.h class tcpserver public qmainwindow tcpserver.cpp tcpserver tcpserver qwidget par...