套接字學習筆記

2021-07-17 01:16:00 字數 2092 閱讀 3643

1.socket函式

int socket(int domain, int type, int protocol);

作用:建立套接字描述符 

domain:協議族

af_unix: af_unix域協議族,本機的程序通訊時使用

af_inet: internet協議族

af_iso:  iso協議族

type:指定套接字型別

sock_stream: 流套接字,面向連線的和可靠的通訊型別

sock_dgram: 資料報套接字,面向非連線的和不可靠的通訊型別

sock_raw: 原始套接字,只對internet協議有效,可以用來直接訪問ip協議

protocol: 指定使用哪種協議

通常設定為0,表示使用預設協議,

internet 協議族的sock_stream套接字使用tcp協議;

internet 協議族的

sock_dgram套接字使用udp協議;

2. bind函式

int 

bind(int sockfd, struct sockaddr *server_address, int addrlen);

3. listen函式

int 

listen(int sockfd, int backlog); 

作用:將乙個套接字轉換為監聽套接字

因為socket函式建立的套接字只具有主動connect的功能,不具備接受連線請求的能力,listen將乙個尚未連線的主動套接字轉換成為被動套接字。

在此處完成三次握手。

4. accept函式

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

作用:從傾聽套接字的完成連線佇列中接收乙個連線,如果完成連線隊列為空,那麼這個程序休眠。

返回值:新的套接字,標識這個接收的連線;addr儲存客戶機位址;addrlen指向客戶機位址長度。

如果對客戶機的位址和位址長度不感興趣,可以將引數addr和addrlen設定為null。

5. close函式

int close(int sockfd);

關閉乙個套接字描述符,與檔案操作類似。

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

6. 設定套接字型別

fcntl(listenfd, f_setfl, o_nonblock);-------------------設定非阻塞

void setnonblocking(int sock)------------------設定非阻塞

opts = opts|o_nonblock;

if(fcntl(sock,f_setfl,opts)<0)

}7. read 和write 函式

int read(int sockfd, char *buf, int len);

int write(int sockfd, char *buf, int len);

8.  send和recv函式

int send(int sockfd, void *buf, size_t len, int flags);

int write(int sockfd, void *buf,size_t len, int flags);

9. sendto和recvfrom函式

int sendto(int sockfd, void *buf, size_t len, int flags, struct sockaddr *to, size_t addrlen);

int recvfrom(int sockfd, void *buf, 

size_t 

len, int flags, struct sockaddr *from, size_t *addrlen);

10. getsockname和getpeername

int getsockname(iint socket, struct sockaddr *address, socklen_t *address_len);

int getpeername(iint socket, struct sockaddr *address, socklen_t *address_len);

socket 套接字學習筆記

socket 方法 receive byte 從繫結的 socket 套接字接收資料,將資料存入接收緩衝區。send byte 將資料傳送到連線的 socket。accept 為新建連線建立新的 socket。注意 如果您使用的是面向連線的協議,則 remoteendpoint 屬性將獲取包含 so...

套接字學習

學習自 學習自 工程設定學習自 有darpa internet 位址 internet 套接字 本地節點的路徑名 unix套接字 ccitt x.25位址 你可以將x.25 套接字完全忽略 等套接字型別。這裡講的internet套接字。internet 套接字的兩種型別 什麼意思?有兩種型別的int...

原始套接字學習筆記(2)

在原始套接字學習的過程中,也遇到了一系列的問題,其中不乏自己粗心大意,也有各種沒有注意的錯誤,這裡著重寫出,並保持持續的更新。1.fgets 函式問題 在使用套接字搭建聊天程式的時候,我在這裡使用了乙個fgets 函式來儲存鍵盤的輸入,具體 如下 char buffer 100 while fget...