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 ...