TCP IP 網路程式設計 第一章

2021-10-09 02:06:31 字數 4393 閱讀 9229

服務端

第一步:呼叫socket函式建立套接字

第二步:呼叫bind函式分配ip位址和埠號

第三步:呼叫listen函式轉為可接聽狀態

第四步:呼叫accept函式受理可接聽狀態

#include

#include

#include

#include

#include

#include

void

error_handling

(char

*message)

;int

main

(int argc,

char

*ar**)

serv_sock=

socket

(pf_inet,sock_stream,0)

;//通過socket函式建立套接字

if(serv_sock ==-1

)error_handling

("server:socket() error");

printf

("[server] socket ok!\n");

// printf("server:socket() is ok\n");

memset

(&serv_addr,0,

sizeof

(serv_addr));

serv_addr.sin_family=af_inet;

serv_addr.sin_addr.s_addr=

htonl

(inaddr_any)

; serv_addr.sin_port=

htons

(atoi

(ar**[1]

));printf

("%d\n"

,serv_addr.sin_port);if

(bind

(serv_sock,

(struct sockaddr*

)&serv_addr,

sizeof

(serv_addr))==

-1)error_handling

("server:bind() error");

//利用bind函式分配ip位址和埠號

printf

("[server] bind ok!\n");

if(listen

(serv_sock,5)

==-1)

error_handling

("server:listen() error");

//呼叫listen函式將套接字轉為可接收狀態

printf

("[server] is listening ok !\n");

clnt_addr_size =

sizeof

(clnt_addr)

; clnt_sock =

accept

(serv_sock,

(struct sockaddr*

)&clnt_addr,

&clnt_addr_size)

;printf

("[server] accpet() ok");

if(clnt_sock==-1

)error_handling

("server:accept() error");

//呼叫accpet函式受理連線請求。如果在沒有連線請求的情況下呼叫該函式,則不會返回,直到有連線請求位置。

write

(clnt_sock,message,

sizeof

(message));

//傳輸資料

close

(clnt_sock)

;close

(serv_sock)

;return0;

}void

error_handling

(char

*message)

客戶端第一步:建立套接字

第二步:連線

#include

#include

#include

#include

#include

#include

void

error_handling

(char

*message)

;int

main

(int argc,

char

* ar**)

printf

("[client] is trying creating socket.....`\n");

sock=

socket

(pf_inet, sock_stream,0)

;if(sock ==-1

)error_handling

("client's socket() error");

printf

("[client]'s socket is ok\n");

memset

(&serv_addr,0,

sizeof

(serv_addr));

serv_addr.sin_family=af_inet;

serv_addr.sin_addr.s_addr=

inet_addr

(ar**[1]

);serv_addr.sin_port=

htons

(atoi

(ar**[2]

));printf

("%d\n"

,serv_addr.sin_port)

;printf

("%d"

,atoi

(ar**[2]

));if

(connect

(sock,

(struct sockaddr*

)&serv_addr,

sizeof

(serv_addr))==

-1)error_handling

("[client]:connect() error!");

str_len =

read

(sock,message,

sizeof

(message)-1

);if(str_len==-1

)error_handling

("[client] read() error\n");

printf

("message from server : %s \n"

,message)

;close

(sock)

;return0;

}void

error_handling

(char

*message)

細節:perror可以輸出具體錯誤資訊,很有用!!!輸出的是系統呼叫的最近一次錯誤。

setsid可以讓程式後台執行

socketlinux中是檔案的一種。

檔案描述符(檔案控制代碼):

標準輸入:0

標準輸出:1

標準錯誤:2

open函式,開啟檔案:

int open(const char *path,int flag);成功時返回檔案描述符,失敗時返回-1

檔案開啟模式有:

close函式,關閉檔案:

close(fd),所以可以關閉套接字。

write函式,輸出資料:

ssize_t write(int fd,const void * buf,size_t nbytes);

ssize_t有符號的int

read函式,讀取資料:

read(fd,buf,sizeof(buf));

檔案描述符是按順序編號的,從3開始。

《TCP IP網路程式設計》尹聖雨 第一章習題

1 套接字在網路程式設計中的作用是什麼?為什麼叫套接字?網路程式設計就是編寫程式使兩台連網的計算機相互交換資料。在我們不需要考慮物理連線的情況下,我們只需要考錄如何編寫資料傳輸軟體。作業系統提供了名為 套接字 的部件,套接字是網路資料傳輸用的軟體裝置。我們把插頭插到插座上就能從電網獲得電力供給,同樣...

第一章 什麼是TCP IP

要回答什麼是協議,首先要回答什麼是網路。網路是計算機之間通過常用的傳輸介質 絕緣的金屬導線 線 無線網路 不需要線路 進行通訊的集合。網路協議就是一套通用規則,用來幫助定義複雜資料傳輸的過程。tcp ip 協議定義了網路通訊的過程,定義了資料單元的格式和內容,以便接收計算機能夠正確解釋接收到的訊息。...

第一章部落格有關TCP IP

經過五天的學習理解,我知道了網路裡面有三大東西 基礎裝置,硬體連線,交換和路由。網路服務有四大層 應用層,傳輸層,網路層,網路介面層。tcp ip 是基於 tcp 和 ip 這兩個最初的協議之上的不同的通訊協議的大的集合。tcp 用於從應用程式到網路的資料傳輸控制。tcp 負責在資料傳送之前將它們分...