網路程式設計Socket

2021-07-16 10:23:12 字數 2949 閱讀 4995

udp將資料及源和目的封裝成資料報,不需要建立連線

每個資料報的大小限制在64k以內

因無連線,是不可靠協議

不需要建立連線,速度快

tcp建立連線,形成傳輸資料的通道

在連線中進行大資料量傳輸

通過三次握手完成連線,是可靠協議

必須建立連線,效率會稍低

udp傳輸類似於對講機,它使用端點(datagramsocket)和資料報(datagrampacket),端點可以作為傳送端或接收端其中的乙個,它不需要進行連線,只需要傳送端將資料打包成資料報並傳送出去,接收端接收資料報並讀取資料即可。

下面看乙個簡單的小例子

傳送端**

public

class udpsenddemo

}

接收端**

public

class udprecedemo

}

上面的例子中進行了乙個簡單的udp傳輸,實際的應用中傳送端肯定不會只傳送一次資料,也不一定只有乙個傳送端。下面這個例子是使用udp傳輸協議完成的區域網聊天程式

聊天室程式

需求:

1,可以向區域網內其他使用者傳送訊息

2,可以接收區域網內其他使用者發來的訊息

3,傳送和接收可以同時進行

分析:

1,為了傳送訊息,建立了傳送端

2,為了接收訊息,建立了接收端

3,為了同時進行傳送和接收,使用了多執行緒技術,將傳送和接收封裝成任務

傳送端**

public

class

send

implements

runnable

@override

public

void

run()

}catch (ioexception e)

ds.close();}}

接收端**

public

class

rece

implements

runnable

@override

public

void

run()

}catch (ioexception e) finally}}

主程式**

public

class chat

}

由於udp的可靠性和單次傳輸大小,它的使用範圍比tcp要窄很多,所以多數情況下選擇使用tcp協議進行傳輸。

tcp與udp的端點和資料報的傳輸模式不同,它分為客戶端(socket)和服務端(serversocket)。服務端接收客戶端的請求,與客戶端建立連線,形成通道,進行資料的相互傳輸。

客戶端與服務端的資料傳輸依靠socket流,它通過s.getinputstream()和s.getoutputstream()獲取輸入流和輸出流。

下面看乙個簡單的tcp傳輸例子

需求:

建立乙個上傳伺服器,客戶端可以將本地上傳到服務端

分析:

1,建立客戶端,向服務端上傳

2,建立服務端,接收客戶端上傳的

3,服務端可以同時連線多個客戶端,使用多執行緒技術,將服務端接收客戶端的**封裝成服務端的執行緒任務。

4,服務端迴圈等待客戶端連線,並開啟新的執行緒任務進行該客戶端上傳任務。

客戶端**

public

class uploadpicclient

//告訴客戶端資料傳送完畢

s.shutdownoutput();

//4,讀取服務端發回的內容

bufferedreader bufin = new bufferedreader(new inputstreamreader(s.getinputstream()));

string str = null;

str = bufin.readline();

system.out.println(str);

} catch (unknownhostexception e) catch (ioexception e) finally catch (ioexception e) }}

}

服務端**

public

class uploadpicserver

} catch (ioexception e) }}

服務任務**

public

class

task

implements

runnable

@override

public

void

run()

system.out.println(ip+"...connected");

try

fos = new fileoutputstream(file);

while((len=in.read(buf))!=-1)

//建立socket輸出流,將上傳完畢的資訊傳送給

printwriter out = new printwriter(s.getoutputstream(),true);

out.println("上傳完畢");

} catch (filenotfoundexception e) catch (ioexception e)finally catch (ioexception e) }}

}

1,客戶端和服務端的socket流在寫入資料時需要進行重新整理,否則另外一端會不斷的等待資料的傳輸。

2,資料傳輸完畢後需要向另一端傳送結束標記,使用socket流的shutdownoutput()方法。

網路程式設計 Socket程式設計

一 網路部分 1.ip 2.埠號 在網路協議中使用埠號識別主機上不同的程序,不同的埠對應於不同的服務 應用程式 3.協議 tcp二 socket部門socket通訊基本流程圖 根據socket通訊基本流程圖,總結通訊的基本步驟 伺服器端 第一步 建立乙個用於監聽連線的socket對像 第二步 用指定...

socket網路程式設計

首先認識乙個表示主機資訊的結構體 struct hostent h addrtype 這是表示主機所使用的位址型別的定義,在c語言winsock2.h標頭檔案中以 af 開頭的巨集定義就是它的值。如果使用的是ipv4,則值為 af inet 如果是ipv6,值為 af inet4 h length ...

Socket網路程式設計

socket 網路程式設計 在c free中建立乙個對話方塊工程,取名socket1,建立如下檔案結構 main.h ifndef main h define main h include bool winapi main proc hwnd hwnd,uint umsg,wparam wparam...