1. 程式人生 > 其它 >Swift 比較運算和三目條件運算

Swift 比較運算和三目條件運算

技術標籤:socket程式設計

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地址和埠號是自己要監聽的,客戶端設定的是要連線的,所以它們的值都是一樣的。