论坛徽章: 0
10 可用积分
我用GTK编了个程序,当点击“发送”按钮时调用一个发送程序向客户机发送消息,点击“停止”按钮时停止发送;可是当我启动发送程序后点击“停止”按钮却没法停止程序,这是怎么回事啊?我的发送和停止函数是这样写的:
void send_clicked(GtkWidget *widget,gpointer data)
{
strcpy(iptext,gtk_entry_get_text(GTK_ENTRY(iptxt)));//get ip to iptext
strcpy(porttext,gtk_entry_get_text(GTK_ENTRY(porttxt)));//get port to porttext
//system("/sock" ;
extern SocketSend sock;
int count=0;
sock.StartSock();
sock.CallServer(iptext,atoi(porttext));
while(count <10)
{
signal(SIGALRM, timer);
while(alarm(3))
pause();
count++;
}
}
void stop_clicked(GtkWidget *widget,gpointer data)
{
//system("/startoracle.sh start" ;
//system("/sock" ;
sock.Close();
}
class SocketSend
{
public:
class probebuff
{
public:
std::string str;
int len;
};
int sockfd;
int ConnectTime;
char buf[MAXDATASIZE];
struct hostent *host;
struct sockaddr_in serv_addr;
public:
int StartSock()//400hang
{
if ((sockfd=socket(AF_INET,SOCK_STREAM,0)) <0)
{
perror("socket error!" ;
exit(1);
}
return 0;
}
int Close()
{
close(sockfd);
return 0;
}
bool CallServer(const char *serverIp,int CallPort)
{
//设置连接服务器的协议族,端口号,服务器端的地址等
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(CallPort);
serv_addr.sin_addr.s_addr = inet_addr(serverIp);
bzero(&(serv_addr.sin_zero), ;
ConnectTime=0;
while (connect(sockfd, (struct sockaddr *)&serv_addr,sizeof(serv_addr)) == -1&& ConnectTime <=MaxConnectTimes)
{
ConnectTime++;
if(ConnectTime <=MaxConnectTimes)
return 1; //连接成功
else
{ perror("connect?error!" ;//连接失败,连接超时
exit(1);
return 0;
}
}
}
int SendBuff(string BuffInfo)
{
static struct senddata
{
char buff[1024];
int len;
}data;
probebuff gProbeBuff1;
//进入临界区 将全局变量的内容写到要发送的变量中,不过往全局变量中写可能也要加临界区
string storeInfo="";
storeInfo=BuffInfo;
gProbeBuff1.str+=storeInfo;
gProbeBuff1.len=gProbeBuff1.str.size();
strcpy(data.buff,gProbeBuff1.str.c_str());
data.len = gProbeBuff1.len;
if(send(sockfd, data.buff, data.len+1, 0) <0)
{
printf("send to server error!\n" ;
exit(1);
}
else
{
printf("send to server success!\n" ;
}
return 1;
}
};
我来回答