⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dialog.c

📁 使用本地端口访问远程不同IP端口
💻 C
字号:
#include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<sys/socket.h>#include<sys/select.h>#include<netinet/in.h>#include<arpa/inet.h>#include<unistd.h>#include<string.h>//#include<pthread.h>#include <gtk/gtk.h>#include "inifile.h"#include "dialog.h"#include "IpHead.h"#include "socket.h"#define MAXSOCKFD 11#define BUFFERSIZE 4096#define MAXMAP 100//--------------------------------------------////              CommServer ver2.0		////-------------------------------------------//int giRows =0;GtkTextBuffer *gbuffer;GtkWidget *text;struct IPTable iptable[MAXMAP];int giMapNum =0;extern int gThreadRunning;extern int gThreadStop;void StartService(void){	int fileError;	char s[200];	int i =0;	char ItemHead[30];	fileError = ReadINI("Comm.ini");	if (fileError ==0)	{		sprintf(s,"Can't open Comm.ini File.Checking the file is existed.\n");		ShowMessage(s);	}		if(GetItem("main","localipaddress1") != NULL){		strcpy(gsLocalIP1, GetItem("main","localipaddress1"));	}		if(GetItem("main","localipaddress2") != NULL){		strcpy(gsLocalIP2 ,GetItem("main","localipaddress2"));	}		if(GetItem("main","remoteipaddress") != NULL){		strcpy(gsRemoteIP,GetItem("main","remoteipaddress"));	}		giMapNum = atoi(GetItem("main","mapportnum"));	if(giMapNum > 0)	{		for(i=1;i<(giMapNum + 1);i++)		{		//	bzero(ItemHead,sizeof(ItemHead));			sprintf(ItemHead,"mapport%d",i);			iptable[i].ctrlport = atoi(GetItem(ItemHead,"ctrlport"));			iptable[i].mapport = atoi(GetItem(ItemHead,"mapport"));			strcpy(iptable[i].ipaddress,GetItem(ItemHead,"ip"));		}	}else{		ShowMessage("无映射端口,请设置!\n");		return;	}	gThreadRunning = 1;		InitList();	for(i=1;i<(giMapNum+1);i++)	{		if(iptable[i].ctrlport > 0)		{			g_thread_create((GThreadFunc)ListenPortTread, iptable[i].ctrlport,FALSE,NULL);		}	}	//int transport;	//transport = TRANSPORT;	g_thread_create((GThreadFunc)TransmitThread, TRANSPORT,FALSE,NULL);	//-----------start listen for be map port-----------------//	ListenMapPort();//	ShowMessage("初始化完毕!\n");}void ListenMapPort(){	int i;	int mapport;	char ipaddr[16];	int iError;	char strmsg[100];	for (i = 1;i < MAXPORTNUM;i++)	{		mapport = iptable[i].mapport;		if(mapport > 0)		{			if(strlen(iptable[i].ipaddress)	> 0 )			{				strcpy(ipaddr,iptable[i].ipaddress);			}			iError = CheckHost(ipaddr);			if(iError == 0)			{				g_thread_create((GThreadFunc)ScanMapPortThread,i,FALSE,NULL);			}else			{				sprintf(strmsg,"ipaddress : %s not find,port : %d not be mapping.\n",ipaddr,mapport);				ShowMessage(strmsg);			}		}		}}static gint motion_notify_event (GtkWidget *widget, GdkEventMotion *event){  /*int x, y;  GdkModifierType state;  if (event->is_hint)    gdk_window_get_pointer (event->window, &x, &y, &state);  else    {      x = event->x;      y = event->y;      state = event->state;    }      if (state & GDK_BUTTON1_MASK && pixmap != NULL)    draw_brush (widget, x, y);  */  	return TRUE;}static gint configure_event(GtkWidget *widget,GdkEventConfigure *event){	return TRUE;}int QMessageBox(GtkWidget *window,char *info){	GtkWidget *dialog;	gint response;	int result=0;	dialog = gtk_message_dialog_new(GTK_WINDOW(window),GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,		GTK_MESSAGE_INFO,GTK_BUTTONS_YES_NO,(gchar *)info);	response = gtk_dialog_run(GTK_DIALOG(dialog));	switch(response)	{		case GTK_RESPONSE_YES:			result = 1;			break;		case GTK_RESPONSE_NO:			result = 2;			break;		default:			break;	}	if (result > 0 )		gtk_widget_destroy(dialog);	return result;}void ClsView(void){	GtkTextIter start,end;	gdk_threads_enter();	gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(gbuffer),&start,&end);        // /*获得缓冲区开始和结束位置的Iter */	gtk_text_buffer_delete(GTK_TEXT_BUFFER(gbuffer),&start,&end);                /*delete text buffer*/	gdk_threads_leave();}void ClsView1(void){	GtkTextIter start,end;//	gdk_threads_enter();	gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(gbuffer),&start,&end);        // /*获得缓冲区开始和结束位置的Iter */	gtk_text_buffer_delete(GTK_TEXT_BUFFER(gbuffer),&start,&end);                /*delete text buffer*///	gdk_threads_leave();}void insert_text( GtkTextBuffer *buffer ,const char *str){   	GtkTextIter start,end;   	gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(gbuffer),&start,&end);      //   /*获得缓冲区开始和结束位置的Iter*/   	gtk_text_buffer_insert (gbuffer, &end,str, -1);}void Msg(const char *str){		if (giRows >  50)	{		ClsView1();		giRows = 0;	}//	gdk_threads_enter();	insert_text(gbuffer ,str);//	gdk_threads_leave();	giRows++;}void ShowMessage(const char *str){		if (giRows >  50)	{		ClsView();		giRows = 0;	}	gdk_threads_enter();	insert_text(gbuffer ,str);	gdk_threads_leave();	giRows++;}static GtkWidget *create_text( void ){   GtkWidget *scrolled_window;   GtkWidget *view;     view = gtk_text_view_new ();   gbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));   scrolled_window = gtk_scrolled_window_new (NULL, NULL);   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),		   	           GTK_POLICY_AUTOMATIC,				   GTK_POLICY_AUTOMATIC);   gtk_container_add (GTK_CONTAINER (scrolled_window), view);   gtk_widget_show_all (scrolled_window);   return scrolled_window;}   int main( int   argc,     char *argv[] ){	GtkWidget *window;	GtkWidget *textview;	GtkWidget *menu;	GtkWidget *table;		if(!g_thread_supported())		g_thread_init(NULL);		gdk_threads_init();		gtk_init (&argc, &argv);		window = gtk_window_new (GTK_WINDOW_TOPLEVEL);	gtk_window_set_title (GTK_WINDOW (window), "CommService ver 2.0");	g_signal_connect (GTK_WINDOW (window), "configure_event",   G_CALLBACK (configure_event), NULL);	g_signal_connect (GTK_WINDOW (window), "delete_event",   G_CALLBACK (delete), NULL);	g_signal_connect (GTK_WINDOW (window), "motion_notify_event",   G_CALLBACK (motion_notify_event), NULL);	gtk_container_set_border_width (GTK_CONTAINER (window), 10);	gtk_widget_set_size_request (GTK_WIDGET (window), 800, 600);	gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);	table = gtk_table_new (20,1,FALSE);	gtk_container_add (GTK_CONTAINER (window), table);	menu = CreateMenu();	gtk_table_attach_defaults (GTK_TABLE (table), menu, 0, 1, 0, 1);	gtk_widget_show (menu);	textview = create_text();	gtk_table_attach_defaults (GTK_TABLE (table), textview, 0, 1,1, 20);	gtk_widget_show(textview);	gtk_widget_show (table);	gtk_widget_show(window);	// Get Application current path.	GetApplicationPath(argv[0]);	// --- Start Thread and Socket Service----//	ShowMessage("Service Starting...............................\n");	StartService();		gdk_threads_enter();	gtk_main ();	gdk_threads_leave();		return 0;}static GtkWidget *CreateMenu(){	GtkWidget *menu;	GtkWidget *menu_bar;    	GtkWidget *root_menu;    	GtkWidget *menu_items;	GtkWidget *hbox;	menu = gtk_menu_new ();            /* Create a new menu-item with a name... */        menu_items = gtk_menu_item_new_with_label ("重启线程");	  /* ...and add it to the menu. */       gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);	    /* Do something interesting when the menuitem is selected */	g_signal_connect_swapped (menu_items, "activate", G_CALLBACK (menuitem_response), 1);            /* Show the widget */        gtk_widget_show (menu_items);    	menu_items = gtk_menu_item_new_with_label ("关闭线程"); 	gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);	    /* Do something interesting when the menuitem is selected */	g_signal_connect_swapped (menu_items, "activate", G_CALLBACK (menuitem_response), 2);            /* Show the widget */        gtk_widget_show (menu_items);	menu_items = gtk_menu_item_new_with_label ("退出系统");	 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);	    /* Do something interesting when the menuitem is selected */	g_signal_connect_swapped (menu_items, "activate", G_CALLBACK (menuitem_response),  3);            /* Show the widget */        gtk_widget_show (menu_items);    /* This is the root menu, and will be the label     * displayed on the menu bar.  There won't be a signal handler attached,     * as it only pops up the rest of the menu when pressed. */    	root_menu = gtk_menu_item_new_with_label ("运行");    	gtk_widget_show (root_menu);    /* Now we specify that we want our newly created "menu" to be the menu     * for the "root menu" */  	gtk_menu_item_set_submenu (GTK_MENU_ITEM (root_menu), menu);    /* Create a menu-bar to hold the menus and add it to our main window */   	menu_bar = gtk_menu_bar_new ();   //	gtk_box_pack_start (GTK_BOX (hbox), menu_bar, FALSE, FALSE, 2);//	gtk_container_add (GTK_CONTAINER (window), menu_bar);	gtk_widget_show (menu_bar);	gtk_menu_shell_append (GTK_MENU_SHELL (menu_bar), root_menu);	return menu_bar;}static void menuitem_response( gint menuitem ){   	 switch(menuitem)	{		case 1:  //Start			gdk_threads_init();			ShowMessage("Thread Restarting..........\n");			StartService();			break;		case 2: //Stop			gThreadRunning=0;			break;		case 3:			onExit();		//-------------test------------		default:			break;	}}gboolean onExit(){	int result;	char s[10];	//	gdk_threads_init();	result = QMessageBox(NULL,"是否要退出系统?");		if(result == 1)	{		//----Close Socket Thread----------//		gThreadRunning=0;		gtk_main_quit();			return FALSE;	}	return TRUE;}static gboolean delete(GtkWidget *widget, GdkEvent  *event,   gpointer   data ){	int result;	char s[10];	result = QMessageBox(widget,"是否要退出系统?");	if(result == 1)	{		//----Close Socket Thread----------//		gThreadRunning=0;		//	while(gThreadStop > 0){	//		sprintf(s,"%d",gThreadStop);	//		ShowMessage(s);			//		sleep(1000);	//	}		gtk_main_quit();			return FALSE;	}	return TRUE;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -