服務端
第一步:呼叫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
可以讓程式後台執行
socket
在linux
中是檔案的一種。
檔案描述符(檔案控制代碼):
標準輸入: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 負責在資料傳送之前將它們分...