-

- 加为好友
- 发送私信
- 在线聊天
|
| 发表于:2008-08-20 09:31:51 楼主 |
下面是我的代码 int old_task_tcp_rev(void) { int i,ch,ret,sock_fd,new_fd; struct sockaddr_in my_addr; int numbytes,linkid,msulen; unsigned char state; int iOptVal; int iOptLen = sizeof(int); fd_set fds_read; int MaxFdSock; struct timeval tv; short bgen; char buffer[1024]; unsigned char *buf=NULL, *abuf=NULL; long m; #define MAXBUFLEN 1024 #define BACKLOG 10 #define FDSOCK_UNDEF -1 if((sock_fd=socket(AF_INET,SOCK_STREAM,0))==-1) { perror("socket:"); goto lab_ret; } i = 1; setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i)); my_addr.sin_family=AF_INET; my_addr.sin_port=htons(global.cfg.c_smg.SpPort); my_addr.sin_addr.s_addr=INADDR_ANY; bzero(&(my_addr.sin_zero),8); if(bind(sock_fd,(struct sockaddr *)&my_addr, sizeof(struct sockaddr))==-1) { perror("bind:"); goto lab_ret; } labstart: printf("listen here......\n"); if(listen(sock_fd,BACKLOG)==-1) { perror("listen:"); goto lab_ret; } if((new_fd=accept(sock_fd,NULL,NULL)) <0) { perror("accept:"); goto lab_ret; } printf("客户端登录上 "); global.skFtServer.fd = new_fd; buf = malloc(MAXBUFLEN); if(buf==NULL) return(-1); abuf = buf; while(1) { FD_ZERO(&fds_read); MaxFdSock=0; if(new_fd!=FDSOCK_UNDEF) { FD_SET(new_fd,&fds_read); if(MaxFdSock <new_fd) MaxFdSock=new_fd; } tv.tv_sec =0; tv.tv_usec=100; ret=select(MaxFdSock+1, &fds_read, NULL,NULL,&tv); if(ret>0) { if(FD_ISSET(new_fd, &fds_read)) { //从TCP端口接收数据流 if((numbytes = recv(new_fd, abuf, 1024, 0)) <= 0) { perror("中断:"); global.skFtServer.fd = 0; goto labstart; } if( ntohl(* ((u32*)abuf)) == numbytes) { // DispHex(abuf,numbytes,0, "cmd"); ProcessSmgSentMsg(abuf,numbytes); } } } } lab_ret: close(new_fd); // close(sock_fd); free(buf); goto labstart; return 0; } 这个程序可以接收到数据,但是时间长了后就接收不到了,希望达人帮我看看啊,在线等。希望大家能加我QQ 164985001 指导下 谢谢 |
|
|
|
100
修改
删除
举报
引用
回复
| |