好吧,我承認找了好久,網上都沒有像樣的完整的實例,然後自己參照書自己寫一個吧!
//!> server端代碼
//!>server.c
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <netinet/in.h>
#include <sys/select.h>
#include <sys/types.h>
#include <sys/socket.h>
#define BUF_LEN 1024
#define SERV_PORT 6000
#define FD_SIZE 100
#define MAX_BACK 100
int main( int argc, char ** argv )
{
int listenfd,connfd, sockfd, maxfd, maxi, i;
int nready,client[FD_SIZE]; //!> 接收select返回值、保存客戶端套接字
int lens;
ssize_t n; //!> read字節數
fd_set rset,allset; //!> 不要理解成就只能保存一個,其實fd_set有點像封裝的數組
char buf[BUF_LEN];
socklen_t clilen;
structsockaddr_in servaddr, chiaddr;
if( (listenfd = socket( AF_INET, SOCK_STREAM, 0 ) ) == -1 )
{
printf("Create socket Error : %d\n", errno );
exit(EXIT_FAILURE );
}
//!>
//!> 下面是接口信息
bzero(&servaddr, sizeof( servaddr ) );
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr =htonl( INADDR_ANY);
servaddr.sin_port = htons( SERV_PORT );
//!>
//!> 綁定
if( bind(listenfd, ( struct sockaddr * )&servaddr, sizeof(servaddr ) ) == -1 )
{
printf("BindError : %d\n", errno);
exit(EXIT_FAILURE );
}
//!>
//!> 監聽
if( listen(listenfd, MAX_BACK ) == -1 )
{
printf("Listen Error : %d\n", errno );
exit(EXIT_FAILURE );
}
//!> 當前最大的感興趣的套接字fd
maxfd =listenfd; //!> 當前可通知的最大的fd
maxi =-1; //!> 僅僅是為了client數組的好處理
for( i = 0;i < FD_SIZE; i++) //!> 首先置為全-1
{