免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2711 | 回复: 19
打印 上一主题 下一主题

出现了一些问题(tcp) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-20 11:22 |只看该作者 |倒序浏览
我用tcp在本机上进行发送接收,结果出现现列情况(netstat -ant),时间越长最多

请问这是什么原因,怎么解决呢???

tcp        0      0 192.168.8.106:1234      192.168.8.106:22848     ESTABLISHED
tcp       31      0 192.168.8.106:1234      192.168.8.106:22849     ESTABLISHED
tcp        0      0 192.168.8.106:1234      192.168.8.106:22828     ESTABLISHED
tcp        0      0 192.168.8.106:1234      192.168.8.106:22829     ESTABLISHED
tcp        0      0 192.168.8.106:1234      192.168.8.106:22831     ESTABLISHED
tcp        0      0 192.168.8.106:22831     192.168.8.106:1234      ESTABLISHED
tcp        0      0 192.168.8.106:22829     192.168.8.106:1234      ESTABLISHED
tcp        0      0 192.168.8.106:22828     192.168.8.106:1234      ESTABLISHED
tcp        0      0 192.168.8.106:22827     192.168.8.106:1234      ESTABLISHED
tcp        0      0 192.168.8.106:22847     192.168.8.106:1234      ESTABLISHED
tcp        0      0 192.168.8.106:22846     192.168.8.106:1234      ESTABLISHED
tcp        0      0 192.168.8.106:22844     192.168.8.106:1234      ESTABLISHED
tcp        0      0 192.168.8.106:22843     192.168.8.106:1234      ESTABLISHED
tcp        0      0 192.168.8.106:22842     192.168.8.106:1234      ESTABLISHED
tcp        0      0 192.168.8.106:22841     192.168.8.106:1234      ESTABLISHED
tcp        0      0 192.168.8.106:22839     192.168.8.106:1234      ESTABLISHED
tcp        0      0 192.168.8.106:22838     192.168.8.106:1234      ESTABLISHED
tcp        0      0 192.168.8.106:22837     192.168.8.106:1234      ESTABLISHED
tcp        0      0 192.168.8.106:22834     192.168.8.106:1234      ESTABLISHED
tcp        0      0 192.168.8.106:22833     192.168.8.106:1234      ESTABLISHED
tcp        0      0 192.168.8.106:22832     192.168.8.106:1234      ESTABLISHED
tcp        0      0 192.168.8.106:22852     192.168.8.106:1234      ESTABLISHED
tcp        0     31 192.168.8.106:22850     192.168.8.106:1234      ESTABLISHED
tcp        0      0 192.168.8.106:22849     192.168.8.106:1234      ESTABLISHED
tcp        0      0 192.168.8.106:22848     192.168.8.106:1234      ESTABLISHED
tcp        0      0 192.168.8.106:1234      192.168.8.106:22827     ESTABLISHED
tcp        0      0 192.168.8.106:1234      192.168.8.106:22837     ESTABLISHED
tcp        0      0 192.168.8.106:32919     192.168.8.106:1521      ESTABLISHED

论坛徽章:
0
2 [报告]
发表于 2006-06-20 11:29 |只看该作者
把情况说清楚一点。
猜测大概是因为你频繁的关闭TCP链接吧。

论坛徽章:
0
3 [报告]
发表于 2006-06-20 11:33 |只看该作者
代码如下:

server.c
  1. #include <stdio.h>
  2. #include <strings.h>
  3. #include <unistd.h>
  4. #include <sys/types.h>
  5. #include <sys/socket.h>
  6. #include <netinet/in.h>
  7. #include <arpa/inet.h>

  8. #define PORT 1234
  9. #define BACKLOG 1

  10. int main(void)
  11. {
  12.         int listenfd,new_fd;
  13.         struct sockaddr_in server;
  14.         struct sockaddr_in client;
  15.         int sin_size;
  16.         fd_set fdset;

  17.         char hello[1024*5];
  18.         if( -1 == ( listenfd = socket( AF_INET, SOCK_STREAM, 0)))
  19.         {
  20.                 printf("Creating socket failed.\n");
  21.                 exit(1);
  22.     }
  23.    
  24.     bzero( &server,sizeof(server));
  25.     server.sin_family = AF_INET;

  26.     server.sin_port = htons(PORT);
  27.     server.sin_addr.s_addr = htonl( INADDR_ANY);
  28.    
  29.     if( -1 == bind( listenfd, ( struct sockaddr *)&server, sizeof( struct sockaddr)))
  30.     {
  31.             printf("Bind error.\n");
  32.             exit(1);
  33.     }
  34.    
  35.     if( -1 == listen( listenfd, BACKLOG))
  36.     {
  37.             printf("listen() error.\n");
  38.             exit(1);
  39.     }
  40.    
  41.     sin_size = sizeof( struct sockaddr_in);
  42.     while(1)
  43.     {

  44.    
  45.     if(-1 == ( new_fd = accept( listenfd, ( struct sockaddr *)&client, &sin_size)))
  46.     {
  47.             printf(" accept() error.\n");
  48.             exit(1);
  49.     }
  50.             memset(hello ,0,sizeof(hello));
  51.                 // 阻塞读
  52.                 if(read(new_fd,hello,1024*5)<0){
  53.                         close(new_fd);
  54.                         continue;
  55.                 }

  56.                 printf("len=%d,Recv=%s\n",strlen(hello),hello);
  57. }
  58.     close( new_fd);
  59.     close( listenfd);
  60. }
复制代码



client.c
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <strings.h>
  4. #include <sys/types.h>
  5. #include <sys/socket.h>
  6. #include <netinet/in.h>
  7. #include <netdb.h>
  8. #define PORT 1234
  9. #define MAXDATASIZE 100


  10. int main( int argc, char* argv[])
  11. {
  12.    int iSocket, numbytes;
  13.    char buf[MAXDATASIZE];
  14.    struct hostent *he;
  15.    int  nWrite;
  16.    struct sockaddr_in server;
  17.    char bdf[1024*5];
  18.     int i,j;   
  19.     while(1)
  20.     {
  21.             i=0;
  22.                
  23.         memset(bdf,0x00,sizeof(bdf));
  24.     /* 启动一个tcp连接 */
  25.         if( -1 == (iSocket = socket( AF_INET, SOCK_STREAM, 0)))
  26.         {
  27.             printf(" socket() error.\n");
  28.             exit(1);
  29.         }
  30.         
  31.         
  32.         bzero( &server,sizeof( server));
  33.         server.sin_family = AF_INET;
  34.         server.sin_port = htons(PORT);
  35.         server.sin_addr.s_addr=inet_addr("192.168.8.106");
  36.         
  37.         if( -1 == connect( iSocket,( struct sockaddr*)&server,sizeof( struct sockaddr)))
  38.         {
  39.                 printf("connect() error.\n");
  40.                 exit(1);
  41.         }
  42.        for(j=0;j<=3;j++)
  43.         {
  44.                
  45.             memset(bdf,0x00,sizeof(bdf));
  46.             if(j==0)
  47.             {
  48.                 strcpy(bdf,"200220010");
  49.                 nWrite=write(iSocket,bdf,strlen(bdf));
  50.             }      
  51.             else if(j==1)
  52.             {
  53.                 strcpy(bdf,"3333333333");
  54.                 nWrite=write(iSocket,bdf,strlen(bdf));
  55.              }else if(j==2)
  56.              {
  57.                strcpy(bdf,"4444444444");
  58.                   nWrite=write(iSocket,bdf,strlen(bdf));
  59.              }
  60.              else if(j==3)
  61.              {
  62.                strcpy(bdf,"55");
  63.                   nWrite=write(iSocket,bdf,strlen(bdf));
  64.              }
  65.            
  66.          }
  67.       sleep(1);
  68.      }
  69.      close( iSocket);
  70. }
复制代码




各位看看吧???

论坛徽章:
0
4 [报告]
发表于 2006-06-20 11:44 |只看该作者
我把server.c中的
// 阻塞读
                if(read(new_fd,hello,1024*5)<0){
                        close(new_fd);
                        continue;
中的close(new_fd);去了,还是出现上述问题,请问是什么原因?????

论坛徽章:
0
5 [报告]
发表于 2006-06-20 13:07 |只看该作者
我自己顶,请问是什么原因,要不我的贴子就沉了

论坛徽章:
0
6 [报告]
发表于 2006-06-20 13:15 |只看该作者
你看你的SEVER程序,accept一个连接以后,进行一次操作,下次有连接你还是再accept一次,每个都不关闭,当然会有很多你看到的东西,你试着在accept后建一个循环,一直到客户端断开连接后再跳出来,关闭SOCKET,继续监听。。。。。

论坛徽章:
0
7 [报告]
发表于 2006-06-20 13:54 |只看该作者
原帖由 linternt 于 2006-6-20 13:15 发表
你看你的SEVER程序,accept一个连接以后,进行一次操作,下次有连接你还是再accept一次,每个都不关闭,当然会有很多你看到的东西,你试着在accept后建一个循环,一直到客户端断开连接后再跳出来,关闭SOCKET,继 ...



我在accept,read后,关闭了new_fd

但是还是存在问题呀????

论坛徽章:
0
8 [报告]
发表于 2006-06-20 14:09 |只看该作者
这是新的代码:

server.c

  1. #define PORT 1234
  2. #define BACKLOG 64
  3. #define SIZENUM 1024*2
  4. int main(void)
  5. {
  6.         int listenfd;
  7.         struct sockaddr_in server;
  8.         struct sockaddr_in client;
  9.         int sin_size;
  10.         fd_set fdset;

  11.         char hello[1024];
  12.         if( -1 == ( listenfd = socket( AF_INET, SOCK_STREAM, 0)))
  13.         {
  14.                 printf("Creating socket failed.\n");
  15.                 exit(1);
  16.     }
  17.    
  18.     bzero( &server,sizeof(server));
  19.     server.sin_family = AF_INET;
  20.     server.sin_port = htons(PORT);
  21.      server.sin_addr.s_addr=inet_addr("192.168.8.106");
  22.     if( -1 == bind( listenfd, ( struct sockaddr *)&server, sizeof( struct sockaddr)))
  23.     {
  24.             printf("Bind error.\n");
  25.             exit(1);
  26.     }
  27.    
  28.     if( -1 == listen( listenfd, BACKLOG))
  29.     {
  30.             printf("listen() error.\n");
  31.             exit(1);
  32.     }
  33.    
  34.     sin_size = sizeof( struct sockaddr_in);
  35.     while(1)
  36.     {
  37.    
  38.   
  39.      int new_fd;
  40.     if(-1 == ( new_fd = accept( listenfd, ( struct sockaddr *)&client, &sin_size)))
  41.     {
  42.             printf(" accept() error.\n");
  43.             exit(1);
  44.     }
  45.             memset(hello ,0,sizeof(hello));
  46.        // 阻塞读
  47.        if(read(new_fd,hello,1024*5)<0){
  48.         printf(" read error.\n");
  49.         close(new_fd);
  50.         continue;
  51.       }

  52.      printf("len=%d,Recv=%s\n",strlen(hello),hello);
  53.      /* 关闭 */
  54.     close(new_fd);
  55. }

  56. }close( listenfd);
  57. }
复制代码




client.c
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <strings.h>
  4. #include <sys/types.h>
  5. #include <sys/socket.h>
  6. #include <netinet/in.h>
  7. #include <netdb.h>
  8. #define PORT 1234
  9. #define MAXDATASIZE 100


  10. int main( int argc, char* argv[])
  11. {
  12.    int iSocket, numbytes;
  13.    char buf[MAXDATASIZE];
  14.    struct hostent *he;
  15.    int  nWrite;
  16.    struct sockaddr_in server;
  17.    char bdf[1024];
  18.     int i,j;   
  19.   
  20.             i=0;
  21.      while(1)
  22.     {         
  23.         memset(bdf,0x00,sizeof(bdf));
  24.        if( -1 == (iSocket = socket( AF_INET, SOCK_STREAM, 0)))
  25.         {
  26.             printf(" socket() error.\n");
  27.             exit(1);
  28.         }
  29.         
  30.         
  31.         bzero( &server,sizeof( server));
  32.         server.sin_family = AF_INET;
  33.         server.sin_port = htons(PORT);
  34.         server.sin_addr.s_addr=inet_addr("192.168.8.106");
  35.    
  36.         if( -1 == connect( iSocket,( struct sockaddr*)&server,sizeof( struct sockaddr)))
  37.         {
  38.                 printf("connect() error.\n");
  39.                 exit(1);
  40.         }
  41.         
  42.                 strcpy(bdf,"200220010");
  43.                 nWrite=write(iSocket,bdf,strlen(bdf));
  44.   
  45.         
  46.          close( iSocket);
  47.           sleep(2);
  48.    }
  49. }
复制代码



哪位帮我看看,

出现下面情况
tcp        0      0 192.168.8.106:1234      192.168.8.106:35078     TIME_WAIT   
tcp        0      0 192.168.8.106:1234      192.168.8.106:35079     TIME_WAIT   
tcp        0      0 192.168.8.106:1234      192.168.8.106:35072     TIME_WAIT   
tcp        0      0 192.168.8.106:1234      192.168.8.106:35073     TIME_WAIT   
tcp        0      0 192.168.8.106:32788     192.168.8.106:32774     ESTABLISHED
tcp      672      0 192.168.8.106:32784     192.168.8.106:32774     ESTABLISHED
tcp        0      0 192.168.8.106:1234      192.168.8.106:35074     TIME_WAIT   
tcp        0      0 192.168.8.106:1234      192.168.8.106:35075     TIME_WAIT   
tcp        0      0 127.0.0.1:35076         127.0.0.1:3566          TIME_WAIT   
tcp        0      0 127.0.0.1:35077         127.0.0.1:32769         TIME_WAIT   
tcp        0      0 192.168.8.106:1234      192.168.8.106:35084     TIME_WAIT   
tcp        0      0 192.168.8.106:1234      192.168.8.106:35085     TIME_WAIT   
tcp        0      0 192.168.8.106:1234      192.168.8.106:35086     TIME_WAIT   
tcp        0      0 192.168.8.106:1234      192.168.8.106:35087     TIME_WAIT   
tcp        0      0 192.168.8.106:1234      192.168.8.106:35080     TIME_WAIT   
tcp        0      0 192.168.8.106:1234      192.168.8.106:35081     TIME_WAIT   
tcp        0      0 192.168.8.106:1234      192.168.8.106:35082     TIME_WAIT   
tcp        0      0 192.168.8.106:1234      192.168.8.106:35083     TIME_WAIT   
tcp        0      0 192.168.8.106:32774     192.168.8.106:32784     ESTABLISHED
tcp        0      0 192.168.8.106:1234      192.168.8.106:35092     TIME_WAIT   
tcp        0      0 192.168.8.106:1234      192.168.8.106:35093     TIME_WAIT   
tcp        0      0 192.168.8.106:1234      192.168.8.106:35094     TIME_WAIT   
tcp        0      0 192.168.8.106:1234      192.168.8.106:35095     TIME_WAIT   
tcp        0      0 192.168.8.106:32774     192.168.8.106:32788     ESTABLISHED
tcp        0      0 192.168.8.106:1234      192.168.8.106:35088     TIME_WAIT   
tcp        0      0 192.168.8.106:1234      192.168.8.106:35089     TIME_WAIT   
tcp        0      0 192.168.8.106:1234      192.168.8.106:35090     TIME_WAIT   
tcp        0      0 192.168.8.106:1234      192.168.8.106:35091     TIME_WAIT   
tcp        0      0 192.168.8.106:1234      192.168.8.106:35068     TIME_WAIT   
tcp        0      0 192.168.8.106:1234      192.168.8.106:35069     TIME_WAIT   
tcp        0      0 192.168.8.106:1234      192.168.8.106:35070     TIME_WAIT   
tcp        1      0 192.168.8.106:35097     192.168.8.106:1234      CLOSE_WAIT  
tcp        0      0 192.168.8.106:1234      192.168.8.106:35071     TIME_WAIT   
tcp        0      0 192.168.8.106:1234      192.168.8.106:35096     TIME_WAIT   
tcp        0      0 192.168.8.106:1234      192.168.8.106:35097     FIN_WAIT2   
tcp        0      0 192.168.8.106:1234      192.168.8.106:35066     TIME_WAIT   
tcp        0      0 192.168.8.106:1234      192.168.8.106:35067     TIME_WAIT  


而且时间越长越多,请帮我看看???


d

论坛徽章:
0
9 [报告]
发表于 2006-06-20 14:48 |只看该作者
加linger,取消close延迟.

论坛徽章:
0
10 [报告]
发表于 2006-06-20 14:51 |只看该作者
原帖由 blogliou 于 2006-6-20 14:48 发表
加linger,取消close延迟.



linger是什么意思呀?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP