- 论坛徽章:
- 0
|
本帖最后由 fantansy 于 2010-10-18 15:39 编辑
如题,客户端循环向服务器发送一段字符串。当服务器关闭,再打开后,要求客户端能自动连上。服务器不用自己写,负责将客户端的发送字符打印出来。
但是在ARM板上测试时,客户端发送数据正常,但是当服务器关闭,客户端也跟着关闭,无任何出错信息。- #include <stdio.h>
- #include <>
- int main(int argc,char* argv[])
- {
- int a;
- if (argc != 3)
- {
- fprintf(stderr,"error input ! <codename> <ip> <port>\n");
- //exit(1);
- }
- while(1)
- {
- a = my_socket(argv[1],argv[2]);
- printf("a : %d\n",a);
- if(a == -2)
- {
- printf("/**************************\nretry to connect the server\n\n**************************************\n");
- }
-
-
- }
-
- printf("here!!");
- return 0;
- }
- int my_socket(char *serv_ip,char *serv_port)
- {
- int sockfd;
- int numbytes;
-
- char serverip[32];
-
- int my_port;
- char buf[]="ddkksldfksdlfkajsaldfksdlfa\n";
- struct sockaddr_in their_addr;
-
- struct timeval tv;
- fd_set rfds,xfds; //写描述符集,异常描述符集
- int maxfd;
- if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) //建立socket
- {
- perror("socket");
- return -2;
- }
- strcpy(serverip,serv_ip);
-
- bzero(&their_addr, sizeof(their_addr)); //一些设置
- their_addr.sin_family = AF_INET;
- their_addr.sin_port = htons(6060);//SERV_PORT
- inet_pton(AF_INET, serv_ip, &their_addr.sin_addr);
- printf("sockfd:%d\n",sockfd);
- if (connect(sockfd, (struct sockaddr *)&their_addr,sizeof(struct sockaddr)) == -1) //连接
- {
- perror("connect:\n");
- close(sockfd);
- return -2;
- }
-
- FD_ZERO(&rfds);
- FD_ZERO(&xfds);
-
- int n;
- while(1)
- {
-
- //sleep(1);
- FD_SET(sockfd,&rfds);
- FD_SET(sockfd,&xfds);//我想看看程序有没有什么异常
- tv.tv_sec=1;
- tv.tv_usec=0;
-
- maxfd = sockfd + 1;
- n = select(maxfd,NULL,&rfds,&xfds,&tv);
- printf("n:%d\n",n);
- if(n > 0 ){
-
- if(FD_ISSET(sockfd,&rfds))
- {
- numbytes=write(sockfd, buf, sizeof(buf)); //如果sockfd可写,那么发送一段字符到服务器
-
- if(numbytes <= 0)
- {
- printf("numbytes error");
- close(sockfd);
- return -2;
- }
-
- }//n>0
-
- if(FD_ISSET(sockfd,&xfds))//判断是否有异常
- {
- printf("&xfds error");
- close(sockfd);
- return -2;
- }
-
- }
- if(n == 0) //select 返回0,则重连
- {
- printf("select time out");
- close(sockfd);
- return -2;
- }
- if(n<0) //select < 0也重连
- {
- printf("select < 0");
- close(sockfd);
- return -2;
- }
-
- }//while
- close(sockfd);
- return -2;
- }//my_socket 函数设定,出错返回-2
复制代码 |
|