免费注册 查看新帖 |

Chinaunix

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

client无法和server对接,为何? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-03-06 08:48 |只看该作者 |倒序浏览
以下是我的核押client端程序为什么断网线时间过长(约半小时),再接回网线但client已无法和server对接(总是显示-2),只有重起client才行!请指教!
#include <setjmp.h>;
#include <signal.h>;
#include <sys/types.h>;
#include <sys/socket.h>;
#include <netinet/in.h>;
#include <netdb.h>;
#include <stdio.h>;

#define END_IND "E"
#define BUF_SIZE 4096
#define MAX_MSG_SIZE        80
char ServerName[20];        /*核押服务器地址*/
int ServerPort;  /*核押服务器监听端口*/
int  m_TimeOut=10;
static jmp_buf env_alrm;
void TcpOutTime(int signo)
{ longjmp(env_alrm,1);
  
}

int CipherTransact(char *buffer)                  //把核押串发到服务器核押
{   int sock,ret=0;
     int i_len;
     struct sockaddr_in server;
     char s_send_msg[ MAX_MSG_SIZE + 1 ];
     printf("The value of Buffer is:%s",buffer);
     strcpy( s_send_msg, "\xef" );          //核押串起始符
     strcat( s_send_msg, buffer );
     strcat( s_send_msg,"\xee";           //核押串终结符
        sock = socket(AF_INET, SOCK_STREAM, 0);
        if( sock < 0 )
        {
                perror("opening stream socket";
                exit(1);
        }


        server.sin_family=AF_INET;
        server.sin_addr.s_addr=inet_addr( ServerName );
        server.sin_port=htons(ServerPort);
signal(SIGALRM,TcpOutTime);
if(setjmp(env_alrm)!=0)
{ close(sock);
return(2);
}

        alarm(5);
        if(connect( sock, (struct sockaddr *)&amp;server, sizeof(server) )<0 )
         {
                perror("connecting stream socket";
                 exit(1);
         }
        if( write(sock, s_send_msg, strlen(s_send_msg) ) < 0 )
         {
         perror("writing in stream socket";
         close(sock);
         exit(1);
         }
        i_len=0;
        i_len=read(sock, s_send_msg, 1 );
        alarm(0);
        s_send_msg[i_len]='\0';
        close(sock);
        if(i_len){
           ret=(int)(s_send_msg[0]-4;
          }
        return ret;
   
}
/* SetParam*/
int SetParam(char *My_IPAdress,int port)
{
        int ret;
        ret=strlen(My_IPAdress);
        if(ret>;19)
                return -1;
        strcpy(ServerName,My_IPAdress);
        ServerPort=port;
        return 0;
}

main(int argc, char ** argv )
{    int ret,i;
     SetParam("180.1.100.202",4000);
  for(i=0;i<80000;i++)
   {      ret=CipherTransact(" 19328120030128  20201  0011 001     123456789012241610";   }   
     if(ret==2){                  //超过5秒还没接到服务器返回值,返回-2。
                  printf("\n Waiting time out\n";
              }
         printf("\nThe %d result is %d\n",i,ret);
    }  
}
ohmylove 该用户已被删除
2 [报告]
发表于 2003-03-06 09:13 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2003-03-06 09:36 |只看该作者

client无法和server对接,为何?

考虑使用短连接。

论坛徽章:
0
4 [报告]
发表于 2003-03-06 18:47 |只看该作者

client无法和server对接,为何?

小弟是初学者能就以上程序或另举一例子说明如何处理SIGPIPE信号或如何用短连接吗?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2003-03-07 10:26 |只看该作者

client无法和server对接,为何?

短连接就是:有业务请求的时候连接,请求处理完毕后断开连接;下次重连。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP