linux網路程式設計學習(3)

2021-09-01 18:07:57 字數 3742 閱讀 4395

linux網路程式設計學習(3)

domain:設定通訊使用的ip協議(也就是通訊區域),本地、非本地

af_unix,       local communication              unix(7)

af_local

af_inet ipv4 internet protocols ip(7)

af_inet6 ipv6 internet protocols ipv6(7)

type:soket型別

sock_stream     provides  sequenced,  reliable,  two-

(可靠的傳輸) way, connection-based byte streams.

an out-of-band data transmission

mechanism may be supported.

sock_dgram supports datagrams (connectionless,

(不可靠的傳輸) unreliable messages of a fixed maxi‐

mum length).

protocol:    soket傳輸的協議(udp,tcp)

返回值:成功返回檔案的描述符;失敗返回-1;

name

connect - initiate a connection on a socket

synopsis

#include /* see notes */

#include int connect(int sockfd, const struct sockaddr *addr,

socklen_t addrlen);

sokefd:

addr:存放:連線指定伺服器的ip,連線伺服器的指定應用

返回值:成功返回0;失敗返回-1

/******************************client***********************************/

#include#include#include#include#include#include #include #includeint main(void)

//連線伺服器-------------------------------------

int ret = -1;

struct sockaddr_in servaddr;

servaddr.sin_family = af_inet;

//將點分十進位制表示的ip需要轉換為整型,因為s_addr是無符號長整型

//函式:inet_addr()可實現轉換:將點分十進位制字串表示的ip轉換為整數

/*name

inet_aton, inet_addr, inet_network, inet_ntoa,

inet_makeaddr, inet_lnaof, inet_netof - internet

address manipulation routines

synopsis

#include #include #include //將點分十進位制表示的ip需要轉換為整型

in_addr_t inet_addr(const char *cp);*/

servaddr.sin_addr.s_addr = inet_addr("192.168.21.213");

//設定埠標識要通訊的應用

//可能本地位元組序和網路位元組序不一樣將網路位元組轉換為本地位元組

//需要將本地位元組轉換為網路位元組序

//大端位元組序和小端位元組序的區分

//轉換函式為:

/*name

htonl, htons, ntohl, ntohs - convert values between

host and network byte order

synopsis

#include uint32_t htonl(uint32_t hostlong);

uint16_t htons(uint16_t hostshort);

//h表示本地host to n:network(網路) s:表示短整形

uint32_t ntohl(uint32_t netlong);

uint16_t ntohs(uint16_t netshort);*/

servaddr.sin_port = htons(8888);

//bzero():將指定位置的資料全部置為0

bzero(servaddr.sin_zero,8);

//通過sockfd連線指定ip和port的伺服器應用

ret = connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));

if(-1 == ret)

printf("connect server ok\n");

return 0;

}

伺服器端程式的編寫;

listen()函式

name

listen - listen for connections on a socket

synopsis

#include /* see notes */

#include int listen(int sockfd, int backlog);

accept()函式

name

accept, accept4 - accept a connection on a socket

synopsis

#include /* see notes */

#include int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

addr:儲存接收到的客戶端的資訊

返回值:返回乙個新的socket;是後續伺服器和客戶端互動資料的乙個鎖棒  

失敗返回-1

linux網路程式設計學習

終於抽時間學習了linux的網路程式設計,以前只是對socket有個字面上的了解,具體的機制和用法一無所知。正好專案要用,學習下,做個筆記。在linux上,任何都可以當做檔案來對待。獲得乙個檔案描述符,就可以對它進行讀寫操作。socket也是一樣。socket在linux下被翻譯成套接字,我覺得這個...

網路程式設計3

短連線 長連線inetaddress類 只表示位址 主機 inetsocketaddress類 主機名 埠 netoworkinte ce類 服務端 客戶端 通訊程式設計關注的三件事 提供服務的稱為服務端 連線服務的稱為客戶端 某個類有server serversocket,那麼這個類往往是給服務端...

Linux網路程式設計學習筆記(五)

通過捕捉sigchld訊號捕捉殭屍程序,可解決多個子程序同時連線的情況 伺服器端 include include include include include include include include include void error handling char message void...