select 学习笔记
来源:互联网 发布:验证算法 编辑:程序博客网 时间:2024/05/16 09:54
写了一个 select 的server + client 在linux 上跑ok
#include<sys/types.h>
#include<sys/socket.h>
#include<stdio.h>
#include<netinet/in.h>
#include<sys/time.h>
#include<sys/ioctl.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
int server_sockfd,client_sockfd;
int server_len,client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;
int result;
fd_set readfds, testfds;
// client_len=sizeof(client_address);
server_sockfd=socket(AF_INET,SOCK_STREAM,0);
server_address.sin_family=AF_INET;
server_address.sin_addr.s_addr=htonl(INADDR_ANY);
server_address.sin_port=htons(9734);
server_len=sizeof(server_address);
bind(server_sockfd,(struct sockaddr *)&server_address,server_len);
listen(server_sockfd,5);
FD_ZERO(&readfds);
FD_SET(server_sockfd,&readfds);
while(1)
{
char ch;
int fd;
int nread;
testfds=readfds;
printf("serverwaiting\n");
result=select(FD_SETSIZE,&testfds,(fd_set *)0,(fd_set *)0,(struct timeval *)0);
if(result<1){
perror("server5");
exit(1);
}
for(fd=0;fd<FD_SETSIZE;fd++){
if(FD_ISSET(fd,&testfds))
{
if(fd==server_sockfd)
{
client_len=sizeof(client_address);
client_sockfd=accept(server_sockfd,(struct sockaddr*)&client_address,&client_len);
FD_SET(client_sockfd,&readfds);
printf("addingclient on fd %d\n",client_sockfd);
}//end of if
else
{
ioctl(fd,FIONREAD,&nread);
if(nread==0)
{
close(fd);
FD_CLR(fd,&readfds);
printf("removing client on fd %d\n",fd);
}
else
{
read(fd,&ch,1);
sleep(5);
printf("serving client on fd %d\n",fd);
ch++;
write(fd,&ch,1);
}
}//end of else
}//if fd is active deal with it
}//looping all the possible value to check
}//while loop of server
}//end
#include<sys/types.h>
#include<sys/socket.h>
#include<stdio.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
int sockfd;
int len;
struct sockaddr_in address;
int result;
char ch='A';
sockfd=socket(AF_INET,SOCK_STREAM,0);
address.sin_family=AF_INET;
address.sin_addr.s_addr=inet_addr("127.0.0.1");
address.sin_port=htons(9734);
len=sizeof(address);
result=connect(sockfd,(struct sockaddr *)&address,len);
if(result==-1)
{
perror("oops:client2");
exit(1);
}
write(sockfd,&ch,1);
read(sockfd,&ch,1);
printf("char from server=%c\n",ch);
close(sockfd);
exit(0);
}
//end
- Linux select学习笔记
- select 学习笔记
- 学习笔记select
- JavaScript 学习笔记-select
- Select学习笔记
- 【学习笔记】select函数
- MYSQL的select 学习笔记
- MYSQL的select 学习笔记
- Select/POLL多路复用---学习笔记
- select/poll/epoll学习笔记
- SQL学习笔记--基本select
- [Struts2.0学习笔记]select标签
- WinSock学习笔记3:Select模型
- sql2000学习笔记之select统计数据
- sql2000学习笔记之select连接查询
- JS对Select的操作学习笔记
- Linq学习笔记(1.2)——select
- 套接字 学习笔记三 select函数
- 软引用、弱引用、虚引用 总结
- Python yield详解
- eclipse refreshing external folders解决方案
- hdu oj 2002
- 上海贝尔光猫 I-120E-Q 的破解之一:开启telnet功能
- select 学习笔记
- (JAVA)异常
- Python yield 详解(二)
- exchange partition;split partition 表分区
- AppCompat实现Action Bar
- Linux 命令收集
- Android基础学习__第6天__广播接收者与Service
- Android中JNI高级应用 - 本地C代码中创建Java对象及本地JNI对象的保存
- Vim常用命令