Linux網路TCP相關的API

2021-08-14 07:45:46 字數 3995 閱讀 4415

socket: 建立套接字

#includeint socket(int family,int type,int protocal)

引數

family: af_inet

sock_dgream 《資料報套接字,udp>

sock_ram 《原始套接字》

protocal: 原始套接字返回值

成功:非負套接字描述符

出錯:-1

bind: 繫結ip和埠號

#include#includeint bind(int sockfd,struct sockaddr *addr,int addrlen)  

引數 sockfd 套接字描述符

addr 繫結的位址,通用位址結構體

addlen 位址長度

返回 成功: 0

出錯:-1

補充 struct sockaddr;/**通用位址結構體定義**/

struct sockaddr_in;/**ipv4協議族位址格式,呼叫bin函式需要型別轉換**/

struct in_addr;

listen: 接聽

#includeint listen(int sockfd,int backlog)

引數 sockfd 套接字描述符

backlog 請求佇列最大請求數

返回 成功: 0

出錯:-1

connect: 發起連線請求

#includeint connect(int sockfd,struct sockaddr *serv_addr,int addrlen)

引數 sockfd 套接字描述符

serv_addr 伺服器位址

addrlen 位址長度

accept: 阻塞接收連線,並建立新連線

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

引數 sockfd 套接字描述符

addr 客戶端位址資訊儲存結構體

addrlen 客戶端位址長度

返回 成功: 0

失敗:-1

send: 傳送資料

#includeint send(int sockfd,const void *buf,int len,int flags)

引數 sockfd 套接字描述符

buf 傳送緩衝區首位址

len 傳送資料長度

flags 一般為0

返回 成功:實際傳送的位元組數

失敗:-1

recv: 接收資料

#includeint recv(int sockfd,const void *buf,int len,int flags)

引數 sockfd 套接字描述符

buf 接收緩衝區首位址

len 接收資料長度

flags 一般為0

返回 成功:實際接收的位元組數

失敗:-1

#include #include #include #include #include #include int main(int argc, const char *argv)

//step 2:繫結ip + port

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

serveraddr.sin_family = af_inet;

serveraddr.sin_port = htons(8888);

serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");

ret = bind(listenfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr));

if(-1 == ret)

//step 3:監聽

ret = listen(listenfd, 5);

if(-1 == ret)

//step 4:接受並建立連線

connfd = accept(listenfd, (struct sockaddr *)&cliaddr, &addrlen);

if(-1 == connfd)

printf("connect successfully, the client ip is %s and port is %d\n", inet_ntoa(cliaddr.sin_addr), ntohs(cliaddr.sin_port));

//接受資料

//ret = read(connfd, buf, sizeof(buf));

ret = recv(connfd, buf, sizeof(buf), 0);

if(-1 == ret)

printf("return value : %d, recv from : %s\n", ret, buf);

//傳送資料

//ret = write(connfd, buf, sizeof(buf));

ret = send(connfd, buf, sizeof(buf), 0);

if(-1 == ret)

printf("send successfully!\n");

close(connfd);

close(listenfd);

return 0;

}

#include #include #include #include #include #include int main(int argc, const char *argv)

//step 2: 發起連線請求

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

serveraddr.sin_family = af_inet;

serveraddr.sin_port = htons(8888);

serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");

ret = connect(connfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr));

if(-1 == ret)

getchar();

//傳送資料

//ret = write(connfd, buf, sizeof(buf));

ret = send(connfd, buf, sizeof(buf), 0);

if(-1 == ret)

printf("send successfully!\n");

//接受資料

//ret = read(connfd, buf, sizeof(buf));

ret = recv(connfd, buf, sizeof(buf), 0);

if(-1 == ret)

printf("recv from %s\n", buf);

close(connfd);

return 0;

}

Linux 網路程式設計 TCP

一 tcp通訊步驟 tcp伺服器部分 1 呼叫函式socket 建立乙個socket 2 設定sockaddr in資訊,如要連線伺服器的ip和埠等屬性 3 呼叫函式bind 繫結ip位址 埠等資訊到socket上 4 呼叫函式listen 設定允許的最大連線數 5 呼叫函式accept 等待來自客...

Linux 網路程式設計(TCP)

include include include include include include include include int main int argc,char argv bzero server addr,sizeof struct sockaddr in server addr.si...

Linux網路相關

功能 語法啟動網絡卡 ifup 網絡卡名 關閉網絡卡 ifdown 網絡卡名 重啟單個網絡卡 ifdown ens33 ifup ens33 檢視網絡卡是否連線 mii tool 網絡卡名 檢視主機名 hostname 更改主機名 重新登入即可永久生效 hostnamectl set hostnam...