所需標頭檔案:
#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...