linux網路程式設計基礎api

2021-10-19 08:19:02 字數 1718 閱讀 2954

socket系統呼叫,成功返回乙個socket檔案描述符,失敗返回-1並設定errno

bind命名套接字,成功返回0,失敗返回-1並設定errno

listen監聽socket,成功返回0,失敗返回-1並設定errno

accept從listen監聽佇列中接受乙個連線,成功返回新的socket,失敗返回-1,並設定errno

connect建立連線,成功返回0,失敗返回-1,並設定errno

shutdown關閉連線,成功返回0,失敗返回-1,並設定errno

服務端先建立乙個sockaddr_in這樣的乙個結構體存放ip位址和port號,然後再使用bind()函式把它和乙個socket變數(sock)結合,然後開始listen監聽套接字sock,再新建乙個client的sockaddr_in這樣乙個結構,然後就可以利用accept函式去sock接受這樣的乙個client連線了。

再之後就可以用recv函式來接收資料了。

struct sockaddr_in server_address;//以下4行都是固定模式的初始化

bzero(&server_address,sizeof(server_address);

server_address.sin_family=af_inet;

inet_pton(af_inet,ip,&server_address.sin_addr);

server_address.sin_port=htons(port);

int ret=bind(sock,(struct sockaddr*)&address,sizeof(address));

ret=listen(sock,5);//設定最大連線數

int connfd=accept(sock,(struct sockaddr*)&client,&client_addrlength);

char buffer[buf_size]

ret=recv(connfd,buffer,buf_size-1,0);//char陣列最後乙個字元預設是\0,所以設定緩衝區的大小是 buf_size -1

客戶端更簡單一些

先建立乙個sockaddr_in這樣的乙個結構體存放ip位址和port號,這裡存的是伺服器對應的ip位址和埠號。直接建立乙個socket變數(sockfd),不用bind,利用sockfd去呼叫connect函式連線服務端就可以了,然後呼叫send()就可以向服務端傳送資料了。

struct sockaddr_in server_address;

int sockfd=sokcet(pf_inet,sock_stream,0);

connect(sockfd,(struct sockaddr*)&server_address,sizeof(server_address);

const char* oob_data="abc"

const char* normal_data="123"

send(sockfd,normal_data,strlen(normal_data),0);

send(sockfd,oob_data,strlen(oob_data),msg_oob);

啟動,服務端設定的ip位址和埠號是自己要監聽的,客戶端設定的是要連線的,所以它們的值都是一樣的。

網路程式設計基礎API

網路位元組序 1.tcp ip協議規定,網路資料流應採用大端位元組序 0x12345678 小端儲存 78儲存在低位址 大端儲存 12儲存在低位址 網路位元組序和主機位元組序的轉換 include uint32 t htonl uint32 t hostlong uint16 t htons uin...

Linux網路程式設計API

一 socket 函式作用 建立乙個新的socket套接字 函式原型 int socket int domain,int type,int protocol af inet ipv4,af inet6 ipv6 2 type sock stream tcp面向資料流 sock dgram udp協議...

學習筆記 網路程式設計基礎API

linux網路程式設計基礎api與核心內tc ip協議族關係。1.socket位址api ip位址及埠對,代表tcp通訊中的一方,稱為socket位址。socket就像pipe一樣,代表的是乙個檔案描述符。可以用socket 來建立。參考 include see notes include int ...