1. 程式使用了乙個陣列fd_a,通訊開始後把需要通訊的多個socket描述符都放入此陣列。
2. 首先生成乙個叫sock_fd的socket描述符,用於監聽埠。
3. 將sock_fd和陣列fd_a中不為0的描述符放入select將檢查的集合fdsr。
4. 處理fdsr中可以接收資料的連線。如果是sock_fd,表明有新連線加入,將新加入連線的socket描述符放置到fd_a。
view code
#include
#include
#include
#include
#include
#include
#include
#include in.h>
#include
#define myport 1234 //
the port users will be connecting to
#define backlog 5 //
how many pending connections queue will hold
#define buf_size 200
int fd_a[backlog]; //
accepted connection fd
int conn_amount; //
current connection amount
void showclient()
printf("
\n\n
");}
int main(void)
if (setsockopt(sock_fd, sol_socket, so_reuseaddr, &yes, sizeof(int)) == -1)
server_addr.sin_family = af_inet; //
host byte order
server_addr.sin_port = htons(myport); //
short, network byte order
server_addr.sin_addr.s_addr = inaddr_any; //
automatically fill with my ip
memset(server_addr.sin_zero, '
\0', sizeof(server_addr.sin_zero));
if (bind(sock_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)
if (listen(sock_fd, backlog) == -1)
printf("
listen port %d\n
", myport);
fd_set fdsr;
int maxsock;
struct timeval tv;
conn_amount = 0;
sin_size = sizeof(client_addr);
maxsock = sock_fd;
while (1)
}ret = select(maxsock + 1, &fdsr, null, null, &tv);
if (ret
if (ret == 0)
//check every fd in the set
for (i = 0; i
//check whether a new connection comes
if (fd_isset(sock_fd, &fdsr))
//add to fd queue
if (conn_amount
else
}showclient();}//
close other connections
for (i = 0; i
}exit(0);
SEL的簡單解釋
sel就是對方法的一種包裝。包裝的sel型別資料它對應相應的方法位址,找到方法位址就可以呼叫方法 1.方法的儲存位置 2.sel物件的建立 sel s1 selector test1 將test1方法包裝成sel物件 sel s2 nsselectorfromstring test1 將乙個字串方法...
linux socket 程式設計
兩段程式 可用於開發板和主機之間的資料傳輸,很管用!file client.c檔案傳輸客戶端程式示例 本檔案是客戶機的 include for sockaddr in include for socket include for socket include for printf include f...
linux socket程式設計
雙休日無聊透頂,看了四五集 反恐24小時 實在不想看了,於是就想搞linux的socket programming來玩玩,前期資料都準備好 早就想寫個看看了。首先,寫個簡單的client端的程式 呵,其實是copy!server端用的是網上當的乙個除錯工具 一開始用的是以前用過的乙個多執行緒執行的介...