- 论坛徽章:
- 0
|
#include<sys/types.h>
#include<sys/socket.h>
#include<sys/wait.h>
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/un.h>
#include<sys/time.h>
#include<sys/ioctl.h>
#include<unistd.h>
#include<netinet/in.h>
#include<fcntl.h>
#define SERVPORT 3333
#define BACKLOG 10
#define MAX_CONNECTED_NO 10
#define MAXDATASIZE 100
int main()
{
struct sockaddr_in server_sockaddr,client_sockaddr;
int sin_size ,recvbytes,flags;
int sockfd,client_fd;
fd_set readfd;
fd_set writefd;
char buf[MAXDATASIZE];
struct timeval tv;
if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
{
perror("socket\n" ;
exit(1);
}
printf("socket success! sockfd == %d\n",sockfd);
server_sockaddr.sin_family = AF_INET;
server_sockaddr.sin_port = htons(SERVPORT);
server_sockaddr.sin_addr.s_addr = INADDR_ANY;
bzero((&server_sockaddr.sin_zero), ;
if(bind(sockfd,(struct sockaddr *)&server_sockaddr,sizeof(struct sockaddr)) == -1)
{
perror("bind\n" ;
exit(1);
}
if(listen(sockfd,BACKLOG) == -1)
{
perror("listen\n" ;
exit(1);
}
FD_ZERO(&readfd);
FD_SET(sockfd,&readfd);
while(1)
{
tv.tv_sec = 0;
tv.tv_usec = 0;
sin_size=sizeof(struct sockaddr_in);
if(select(MAX_CONNECTED_NO,&readfd,NULL,NULL,/*(struct timeval *)0*/&tv) >0)
{
if(FD_ISSET(sockfd,&readfd) > 0)
{
memset(buf,'\0',MAXDATASIZE);
if((client_fd=accept(sockfd,(struct sockaddr *)&client_sockaddr,&sin_size)) == -1)
{
perror("accept\n" ;
exit(1);
}
if((recvbytes=recv(client_fd,buf,MAXDATASIZE,0)) == -1)
{
perror("recv\n" ;
exit(1);
}
printf("received:%s\n",buf);
if(read(client_fd,buf,MAXDATASIZE) < 0)
{
perror("read\n" ;
exit(1);
}
printf("received:%s\n",buf);
}
close(client_fd);
}
// usleep(200000);
// exit(1);
}
}
文中红色地方用*(struct timeval *)0就可以检测到客户端连接,我换成&tv就检测不到客户端连接了,请帮忙看看这是什么原因,谢谢!下面是client.c的代码:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#define SERVPORT 3333
#define MAXDATASIZE 100
int main(int argc,char *argv[])
{
int sockfd,sendbytes;
char buf[MAXDATASIZE];
struct hostent *host;
struct sockaddr_in serv_addr;
if(argc < 2)
{
printf("please enter the server's host\n" ;
exit(1);
}
if((host = gethostbyname(argv[1])) == NULL)
{
perror("gethostbyname\n" ;
exit(1);
}
if((sockfd=socket(AF_INET,SOCK_STREAM,0)) == -1)
{
perror("socket\n" ;
exit(1);
}
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(SERVPORT);
serv_addr.sin_addr=*((struct in_addr *)host->h_addr);
bzero(&(serv_addr.sin_zero), ;
// while(1)
// {
if(connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr)) == -1)
{
perror("connect\n" ;
exit(1);
}
if((sendbytes=send(sockfd,"hello",5,0)) == -1)
{
perror("send\n");
exit(1);
}
// }
close(sockfd);
} |
|