linux下socket程式設計歸納記錄

2021-07-03 01:47:55 字數 2845 閱讀 1910

所需標頭檔案:

#include

#include

基礎套接字:

返回值:

0表示成功

-1表示失敗

errno記錄錯誤**

1:建立套接字

intsocket(int domain, int type, int protocol)

引數描述:

domain:套接字網域名稱

{af_unix:用於本地通訊

af_inet:ipv4,internet協議(本例使用該網域名稱做參考)

af_inet6:ipv6,internet協議..

}type:套接字型別

{sock_stream:流式套接字,用於套接字之間流式i/o操作,需先建立連線。特點1是資料按照寫入時順序被讀取方接收,保證傳輸正確性,因此提供可靠的資料傳輸;特點2是僅僅是簡單將資料交給接收方。

sock_dgram:資料報套接字,用與無連線通訊。資料傳輸並不嚴格,接收端不能知道是否丟失了資料。

}protocaol:使用的協議

{一般情況下為0,系統會自動選擇適合的協議型別。

}2:請求連線函式:

intconnect(int sockfd, const struct sockaddr *servaddr,socklen_t addrlen)

引數描述:

sockfd:sokect生成的套接字

servaddr:客戶端準備連線的伺服器位址

intbind(int sockfd,const struct sockaddr *myaddr,socklen_t addrlen)

引數描述:

sockfd:sokect生成的套接字

4:監聽函式:

intlisten(int sockfd,int backlog)

引數描述:

sockfd:sokect生成的套接字

backlog:指完成tcp三次握手後已成功建立的tcp連線的佇列長度,伺服器執行accept操作從該佇列中取下乙個連線進行後續處理。

![backlog佇列管理](

接收請求函式:

intaccept(int sockfd, struct sockaddr *cliaddr,socklen_t *addrlen)

引數描述:

sockfd:sokect生成的套接字

返回值:

如果呼叫成功,將是乙個新的套接字描述符,稱為連線套接字,伺服器使用該套接字和已建立連線的客戶端進行通訊,而原有的監聽套接字繼續接收後續新客戶端發來的連線請求。連線套接字在通訊完畢後通常會被立刻關閉,但是監聽套接字一直處於監聽狀態直達應用結束。

例子

客戶端:

#include 

#include

#include

#include

#include

#include

#include

#include

#include

int main(void)

char s[1024];

memset(s, 0, sizeof(1024));

strcpy(s, "hello world");

if (send(st, s, strlen(s), 0) == -1)//傳送buf的資料

close(st);//關閉socket

return exit_success;

}

伺服器端:

#include 

#include

#include

#include

#include

int main(int arg, char *args)

struct sockaddr_in addr;//定義乙個ip位址結構

memset(&addr, 0, sizeof(addr));

addr.sin_family = af_inet;//將addr結構的屬性定位為tcp/ip位址

addr.sin_port = htons(8080);//將本地位元組順序轉化為網路位元組順序。

addr.sin_addr.s_addr = htonl(inaddr_any);//inaddr_any代表這個server上所有的位址

//將ip與server程式繫結

if (bind(st, (struct sockaddr *) &addr, sizeof(addr)) == -1)

//server端開始listen,

if (listen(st, 20) == -1)

char s[1024];

int client_st = 0;//client端socket

//socklen_t len = 0;

struct sockaddr_in client_addr;//表示client端的ip位址

//void *p = &client_addr;

int i;

for (i = 0; i < 5; i++)

while(1)

else

else

printf("recv failed %s\n", strerror(errno));

break;}}

close(client_st);//關閉client端socket

}close(st);//關閉server端listen的socket

return exit_success;

}

linux下socket程式設計

一 什麼是socket socket可以看成是使用者程序與核心網路協議棧的程式設計介面。socket不僅可以用於本機的程序間通訊,還可以用於網路上不同主機的程序間通訊。socket api是一層抽象的網路程式設計介面,適用於各種底層網路協議,如ipv4 ipv6。struct sockaddr in...

linux下socket程式設計

作為乙個嵌入式開發者,在實際的研發專案中,常常需要編寫socket網路程式設計介面,提供給軟體開發人員。下面將提供乙個常用的 模板 客戶端的功能可以用微控制器多功能除錯助手進行驗證 include include include include include include include def...

linux下socket程式設計

簡單的linux下socket程式設計,分別基於tcp和udp協議實現的簡單程式 linux下socket程式設計可以概括為以下幾個函式的運用 流程 將套接字繫結到伺服器的網路位址上 if bind server sockfd,struct sockaddr my addr,sizeof struc...