TCP程式設計函式和步驟

2021-08-26 03:28:21 字數 4355 閱讀 4137

tcp程式設計的伺服器端一般步驟是

1、建立乙個socket,用函式socket();

2、設定socket屬性,用函式setsockopt();*可選

3、繫結ip位址、埠等資訊到socket上,用函式bind();

4、開啟監聽,用函式listen();

5、接收客戶端上來的連線,用函式accept();

6、收發資料,用函式send()和recv(),者read()和write();

7、關閉網路連線;

8、關閉監聽;

tcp程式設計的客戶端一般步驟是:

1、建立乙個socket,用函式socket();

2、設定socket屬性,用函式setsockopt();*可選

3、繫結ip位址、埠等資訊到socket上,用函式bind();*可選

4、設定要連線的對方的ip位址和埠等屬性;

5、連線伺服器,用函式connect();

6、收發資料,用函式send()和recv(),或者read()和write();

7、關閉網路連線;

udp程式設計的伺服器端一般步驟是:

1、建立乙個socket,用函式socket();

2、設定socket屬性,用函式setsockopt();*可選

3、繫結ip位址、埠等資訊到socket上,用函式bind()

4、迴圈接收資料,用函式recvfrom();

5、關閉網路連線;

udp程式設計的客戶端一般步驟是:

1、建立乙個socket,用函式socket();

2、設定socket屬性,用函式setsockopt();*可選

3、繫結ip位址、埠等資訊到socket上,用函式bind();*可選

4、設定對方的ip位址和埠等屬性;

5、傳送資料,用函式sendto();

6、關閉網路連線;

telnet

telnet是乙個用來遠端控制的程式,但是我們完全可以用這個程式來除錯我們的服務端程式的.比如我們的伺服器程式在監聽8888埠,我們可以用telnetlocalhost8888來檢視服務端的狀況

資料結構

1、位址結構

structsockaddr_in;

structsockaddr;

操作函式

1、socket:

建立socket描述符

intsocket(intdomain,inttype,intprotocol);

domain=af_inet,socket的型別,type=sock_stream或sock_dgram,分別表示tcp連線和udp連線;protocol=0。

返回乙個整型socket描述符。

2.bind: 

將socket描述符與你本機上的乙個埠相關聯(僅用於伺服器)

intbind(intsockfd,structsockaddr*my_addr,intaddrlen);

sockfd是乙個socket描述符

my_addr是乙個指向包含有本機ip位址及埠號等資訊的sockaddr型別的指標;

addrlen=sizeof(structsockaddr)。

返回:成功=0;失敗=-1,errno=錯誤號。

可以用下面的賦值自動獲得本機ip位址和隨機獲取乙個沒有被占用的埠號:

my_addr.sin_port=0;/*系統隨機選擇乙個未被使用的埠號*/

my_addr.sin_addr.s_addr=inaddr_any;/*填入本機ip位址*/

3.connect:

與遠端伺服器建立乙個tcp連線(用於客戶端)

intconnect(intsockfd,structsockaddr*serv_addr,intaddrlen);

sockfd是目的伺服器的sockt描述符

serv_addr是包含目的機ip位址和埠號的指標。

返回:成功=0;失敗=-1,errno=錯誤號。

4、listen:

監聽是否有服務請求,用於bind()後

intlisten(intsockfd,intbacklog);

sockfd是socket系統呼叫返回的socket描述符;

backlog指定在請求佇列中允許的最大請求數,預設值為20。

返回:成功=0;失敗=-1,errno=錯誤號。

5.accept:

接受來自客戶的請求

intaccept(intsockfd,void*addr,int*addrlen);

sockfd是被監聽的socket描述符,

addr是指向sockaddr_in變數的指標,存放客戶主機的資訊;

addrten指向值為sizeof(structsockaddr_in)的整型指標變數。

返回:成功返回乙個新的socket描述符,來供這個新連線來使用。錯誤發生時返回乙個-1並且設定相應的errno值。

6.send:

在連線(tcp)的socket方式下傳送資訊

intsend(intsockfd,constvoid*msg,intlen,intflags);

sockfd是用來傳輸資料的socket描述符

msg是乙個指向要傳送資料的指標。

len是以位元組為單位的資料的長度。

flags一般情況下置為0。

7.recv:

在連線(tcp)的socket方式下接收資料

intrecv(intsockfd,void*buf,intlen,unsignedintflags);

sockfd是接受資料的socket描述符;

buf是存放接收資料的緩衝區;

len是緩衝的長度。

flags也被置為0。

返回:實際上接收的位元組數,如果連線中止,返回0,。出現錯誤時,返回-1並置相應的errno值。

8.sendto:

在在無連線(udp)的socket方式下傳送資料

intsendto(intsockfd,constvoid*msg,intlen,unsignedintflags,conststructsockaddr*to,inttolen);

to表示目地機的ip位址和埠號資訊

tolen=sizeof(structsockaddr)。

返回:實際傳送的資料位元組長度或在出現傳送錯誤時返回-1。

9.recvfrom()

在無連線(udp)的socket方式下接收資料

intrecvfrom(intsockfd,void*buf,intlen,unsignedintflags,structsockaddr*from,int*fromlen);

from儲存源機的ip位址及埠號。

fromlen=sizeof(structsockaddr)。

返回:實際存入from中的資料位元組數。當出現錯誤時返回-1,並置相應的errno。

10.close()

釋放socket,停止任何資料操作

close(sockfd);

11.shutdown:

單向關閉連線

intshutdown(intsockfd,inthow);

how可以設為下列值:

·0-------不允許繼續接收資料

·1-------不允許繼續傳送資料

·2-------不允許繼續傳送和接收資料,均為允許則呼叫close()

shutdown在操作成功時返回0,在出現錯誤時返回-1(並置相應errno)。

12.gethostbyname:

網域名稱和ip位址的轉換

structhostent*gethostbyname(constchar*name);

13.inet_pton函式:

將點分十進位制串轉換成網路位元組序二進位制值,此函式對ipv4位址和ipv6位址都能處理。

intinet_pton(intfamily,constchar*strptr,void*addrptr); 

第乙個引數可以是af_inet或af_inet6:第二個引數是乙個指向點分十進位制串的指標:第三個引數是乙個指向轉換後的網路位元組序的二進位制值的指標。       

返回:1---成功   0---輸入不是有效的表達格式   -1---失敗

14.inet_ntop函式:

和inet_pton函式正好相反,inet_ntop函式是將網路位元組序二進位制值轉換成點分十進位制串。

constchar*inet_ntop(intfamily,constvoid*addrptr,char*strptr,size_tlen); 

第乙個引數可以是af_inet或af_inet6:第二個引數是乙個指向網路位元組序的二進位制值的指標;第三個引數是乙個指向轉換後的點分十進位制串的指標;第四個引數是目標的大小,以免函式溢位其呼叫者的緩衝區。

返回:指向結果的指標---成功   null---失敗

TCP程式設計步驟概述

tcp 程式設計的伺服器端一般步驟是 1 建立乙個socket,用函式socket 2 準備通訊位址 3 繫結ip位址 埠等資訊到socket上,用函式bind 4 開啟監聽,用函式listen 5 接收客戶端上來的連線,用函式accept 6 收發資料,用函式send 和recv 或者read 和...

TCP和UDP程式設計的區別,步驟

tcp和udp程式設計有一些不同的地方總結如下 tcp tcp程式設計的伺服器端一般步驟是 1 建立乙個socket,用函式socket 2 設定socket屬性,用函式setsockopt 可選 3 繫結ip位址 埠等資訊到socket上,用函式bind 4 開啟監聽,用函式listen 5 接收...

基於TCP 的網路程式設計步驟

基於tcp 伺服器端 1.建立乙個socket,用函式socket 2.繫結ip位址 埠等資訊到socket上,用函式bind 3.設定允許的最大連線數,用函式listen 4.等待來自客戶端的連線請求,用函式accept 5.收發資料,用函式send 和recv 或者read 和write 6.關...