使用BIO實現的傳統網路程式設計

2021-10-23 07:22:51 字數 1721 閱讀 3981

網路程式設計:實現連線到網路的計算機之間的網路通訊,比如聊天、傳檔案。

ip:唯一標識網路中的一台計算機。檢視本機ip:

# windows

ipconfig

# linux

ifconfig

埠號:唯一標識一台機器上的某個程序。0-65535,1024以下的基本都被作業系統占用了,盡量使用1024以上的埠。

ip確定是哪台機器,port確定是這台機器上的哪個程序。

網路通訊協議

套接字(socket):ip:port的形式,由ip、port唯一標識。通訊的兩端都有socket,網路通訊其實是socket之間的通訊,資料在2個socket之間通過io流傳輸。

工具類

public

class

udp/**

*監聽埠,接收訊息

*/public

static

void

receive()

throws ioexception

}}

測試類

public

class

test

catch

(ioexception e)}}

);receivethread.

start()

;//怕接收執行緒暫時沒分配到時間片,在傳送訊息之後才執行,沒能接收到掐前面的訊息,可以讓傳送訊息的執行緒沉睡會兒

thread.

sleep

(100);

//也可以單獨開啟一條執行緒來傳送訊息

udp.

send

("127.0.0.1"

,"hello");

}}

udp是不可靠的,不管對方ip存不存在、對方有沒有啟動監聽,直接發出去,不管對方能不能接收到。

工具類

public

class

tcp/**

*監聽埠,接收訊息

*/public

static

void

receive()

throws ioexception

}}

tcp要區分客戶端、服務端,客戶端用socket,服務端用serversocket,通過serversocket獲取與客戶端對應的socket,來與客戶端通訊。

客戶端、服務端是相對的,傳送資料的一方叫做客戶端,接收訊息的一方叫做服務端,通常要同時作為客戶端、服務端。

接收到對方訊息後,可以呼叫send()傳入對方ip與之通訊,也可以寫個過載的send(),傳入與客戶端對應的socket。

測試類

public

class

test

catch

(ioexception e)}}

);receivethread.

start()

;//怕接收執行緒暫時沒分配到時間片,在傳送訊息之後才執行,沒能接收到掐前面的訊息,可以讓傳送訊息的執行緒沉睡會兒

thread.

sleep

(100);

//也可以單獨開啟一條執行緒來傳送訊息

tcp.

send

("127.0.0.1"

,"hello");

}}

tcp提供可靠傳輸,傳送訊息之前要三次握手確定雙方可以正常通訊。

Java Socket實現基於BIO的TCP通訊

bio,即同步並阻塞。服務端會在serversocket物件的accept方法發生阻塞,當有連線進入的時候,才能繼續往下執行 讀取資料,呼叫read方法時,也會發生阻塞。public class bioserver catch ioexception e private static void op...

網路程式設計 NIO三大件及與BIO的區別

二 channel 三 selector 四 bio與nio的區別 buffer本質上就是一塊記憶體區,可以用來寫入資料,實現子類有bytebuffer charbuffer doublebuffer floatbuffer intbuffer longbuffer 和 shortbuffer。優點...

c 實現網路程式設計

服務端程式的編寫 1.建立套接字 socket 2.將套接字繫結到乙個本地位址和埠上.bind 3.將套接字設為監聽模式,準備接收客戶請求 listen 4.等待客戶請求到來,當請求到來後,接收連線請求,返回乙個新的對應於此次連線的套接字 accept 5.用返回的套接字和客戶端進行通訊 send ...