- 论坛徽章:
- 0
|
以下是我的核押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 *)&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);
}
} |
|