`
kevinflynn
  • 浏览: 41230 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

ChatRoom cleint.c Based linux C coding

 
阅读更多
#include <gtk/gtk.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define OURPORT 8088
gint sd;
struct sockaddr_in s_in;
gchar username[64];
gchar buf[1024];
gchar get_buf[1048];
gboolean isconnected=FALSE;

static GtkWidget *text;
static GtkTextBuffer *buffer;
static GtkWidget *message_entry;
static GtkWidget *message_entry;
static GtkWidget *name_entry;
static GtkWidget *login_button;
//
void get_message(void)
{
	GtkTextIter iter;
	gchar get_buf[1024];
	gchar buf[1024];
	while(read(sd,buf,1024)!=-1)
	{
		sprintf(get_buf,"%s",buf);
		gdk_threads_enter();
		gtk_text_buffer_get_end_iter(buffer,&iter);
		gtk_text_buffer_insert(buffer,&iter,get_buf,-1);
		gdk_threads_leave();
	}
	

}

void on_destory(GtkWidget *widget,GdkEvent *event,gpointer data)
{
	sprintf(username,"guest");
	if(do_connect()==TRUE)
	{
		//set widget's sensitive
		gtk_widget_set_sensitive(login_button,FALSE);
		g_thread_create((GThreadFunc)get_message,NULL,FALSE,NULL);
	}
	gtk_widget_destroy(widget);
}

void on_button_clicked(GtkButton *button,gpointer data)
{
	const gchar *name;
	name=gtk_entry_get_text(GTK_ENTRY(name_entry));
	sprintf(username,"%s",name);
	if(do_connect())
	{
		gtk_widget_set_sensitive(login_button,FALSE);
		g_thread_create((GThreadFunc)get_message,NULL,FALSE,NULL);
	}
	gtk_widget_destroy(data);
}

void create_win(void)
{
        //Creaet login frame
	GtkWidget *win,*vbox;
	GtkWidget *button;
	win=gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title(GTK_WINDOW(win),"Please input userName");
	gtk_window_set_position(GTK_WINDOW(win),GTK_WIN_POS_CENTER);
        gtk_window_set_default_size(GTK_WINDOW(win),400,400);
	gtk_container_set_border_width(GTK_CONTAINER(win),10);
	g_signal_connect(G_OBJECT(win),"delete_event",G_CALLBACK(on_destory),NULL);
	//gtk_window_set_modal(GTk_WINDOW(win),TRUE);
	gtk_window_set_position(GTK_WINDOW(win),GTK_WIN_POS_CENTER);
	vbox=gtk_vbox_new(FALSE,0);
	gtk_container_add(GTK_CONTAINER(win),vbox);

	name_entry=gtk_entry_new();
	gtk_box_pack_start(GTK_BOX(vbox),name_entry,TRUE,TRUE,5);
	button=gtk_button_new_from_stock(GTK_STOCK_OK);
	g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_button_clicked),win);
	gtk_box_pack_start(GTK_BOX(vbox),button,FALSE,FALSE,5);
	gtk_widget_show_all(win);
}

gboolean do_connect(void)
{
	GtkTextIter iter;
	gint slen;
	sd=socket(AF_INET,SOCK_STREAM,0);
	if(sd<0)
	{
		gtk_text_buffer_get_end_iter(buffer,&iter);
		gtk_text_buffer_insert(buffer,&iter,"Open socket error!\n",-1);
		return FALSE;
	}
	s_in.sin_family=AF_INET;
	s_in.sin_port=OURPORT;
	slen=sizeof(s_in);
	if(connect(sd,(struct sockaddr *)&s_in,slen)<0)
	{
		gtk_text_buffer_get_end_iter(buffer,&iter);
		gtk_text_buffer_insert(buffer,&iter,"Connect server error!\n",-1);
		return FALSE;
	}
	else
	{
		gtk_text_buffer_get_end_iter(buffer,&iter);
		gtk_text_buffer_insert(buffer,&iter,username,-1);
		gtk_text_buffer_get_end_iter(buffer,&iter);
		gtk_text_buffer_insert(buffer,&iter,"\nSuccessfully connected to a server!\n",-1);
		write(sd,username,64);
		isconnected=TRUE;
		return TRUE;
	}

}

void on_send(GtkButton *button,gpointer data)
{
	const char* message;
	//if(isconnection==FALSE) return;
	message=gtk_entry_get_text(GTK_ENTRY(message_entry));
	sprintf(buf,"%s\n",message);
	write(sd,buf,1024);
	gtk_entry_set_text(GTK_ENTRY(message_entry),"");
	

}

void on_login(GtkWidget *button,gpointer data)
{
    create_win();
}

void on_delete_event(GtkWidget *widget,GdkEvent *event,gpointer data)
{
   close(sd);
   gtk_main_quit();
}

int main(int argc,char*argv[])
{
    GtkWidget *window;
    GtkWidget *vbox,*hbox,*button,*label,*view;
    if(!g_thread_supported())
       g_thread_init(NULL);
    gtk_init(&argc,&argv);
    window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window),"client point");
    gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
    gtk_window_set_default_size(GTK_WINDOW(window),400,400);
    g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(on_delete_event),NULL);
    gtk_container_set_border_width(GTK_CONTAINER(window),10);
    vbox=gtk_vbox_new(FALSE,0);
    gtk_container_add(GTK_CONTAINER(window),vbox);

    hbox=gtk_hbox_new(FALSE,0);
    gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,5);
    label =gtk_label_new("Please click the login button to connect the server");
    gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,5);  
    
    //create login button  
    login_button=gtk_button_new_with_label("login");
    gtk_box_pack_start(GTK_BOX(hbox),login_button,FALSE,FALSE,5);
    g_signal_connect(G_OBJECT(login_button),"clicked",G_CALLBACK(on_login),NULL);
    
    view=gtk_scrolled_window_new(NULL,NULL);
    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(view),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
    text=gtk_text_view_new();
    gtk_box_pack_start(GTK_BOX(vbox),view,TRUE,TRUE,5);
    gtk_container_add(GTK_CONTAINER(view),text);
    buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(text));

    hbox=gtk_hbox_new(FALSE,0); 
    gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,5);
    
    label=gtk_label_new("Input message:");
    gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,5);

    message_entry=gtk_entry_new();
    gtk_box_pack_start(GTK_BOX(hbox),message_entry,FALSE,FALSE,5);
    
    button=gtk_button_new_with_label("send");
    gtk_box_pack_start(GTK_BOX(hbox),button,FALSE,FALSE,5);
    g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_send),NULL);
    gtk_widget_show_all(window);
    gdk_threads_enter();//
    gtk_main();
    gdk_threads_leave();
    return FALSE;
    //gtk_widget_show_all(window);
   //gtk_main();
   //return 0;

}




















 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    linux_chatroom.rar_Linux 聊天_linux 网络_linux 聊天程序_linux_chatroom_网

    在本资源"linux_chatroom.rar"中,我们探讨的是一个专为Linux系统设计的网络聊天程序。这个程序具有很高的学习价值,尤其对于那些热衷于Linux编程和网络通信的开发者而言,它提供了一个实践和理解相关技术的实例。让...

    chatroom(java).rar_HTML ClogIn_chatroom:.war

    【标题】"chatroom(java).rar" 是一个包含使用Java编程语言实现的聊天室功能的压缩文件,其中的核心应用是 "HTML ClogIn_chatroom.war"。这个WAR(Web ARchive)文件是Java Web应用程序的标准打包格式,通常用于部署...

    linux-chatroom.rar_linux 多路复用

    在这个“linux-chatroom.rar”项目中,我们看到的是一个利用多路复用实现的聊天室应用,它包括客户端(fu.c)和服务端(ke.c)。 1. **多路复用技术** - **select**: 这是最基础的多路复用技术,它可以监控多个...

    linux-chatroom.rar_Chatroom_chatroom c Linux_linux 聊天室_linux 鑱婂ぉ

    总之,"linux-chatroom.rar"项目展示了在Linux环境下,如何利用网络编程技术创建一个安全、功能完善的聊天室,并提供了对不当内容的有效管理。这样的项目不仅锻炼了开发者在网络编程和并发处理方面的技能,也体现了...

    ChatRoom.rar ChatRoom.rar

    ChatRoom.rarChatRoom.rarChatRoom.rarChatRoom.rarChatRoom.rarChatRoom.rarChatRoom.rarChatRoom.rarChatRoom.rarChatRoom.rarChatRoom.rarChatRoom.rarChatRoom.rarChatRoom.rarChatRoom.rarChatRoom.rarChatRoom...

    Linux_chatroom_select.rar_Linux proc虚拟系统_Linux 聊天_linux c selec

    在本资源中,我们主要探讨的是Linux环境下的网络编程,特别是使用`select`函数实现一个异步通信的聊天程序。`select`是Linux系统中一个非常重要的I/O多路复用函数,它允许程序同时监控多个文件描述符,等待它们就绪...

    chatroom_Chatroom_chatroom.com_联合阵线versi_网络聊天室_TheRoom_

    Simple version of the Internet chat room.

    Linux-chatroom.zip

    本项目名为“Linux-chatroom”,通过分析其提供的代码,我们可以深入理解如何在Linux环境下实现多客户端连接并支持群聊、私聊功能。这个项目涉及的技术点主要包括网络编程、多线程、并发处理以及数据通信协议。 1. ...

    chatroom2.rar

    【Java聊天室系统详解】 Java聊天室系统是一种基于Java编程语言实现的实时通讯应用,它允许用户通过网络进行文本、语音甚至视频的交互。在Java技术栈中,开发这样的系统通常涉及多线程、网络编程、并发处理以及可能...

    WebSocket 聊天室 chatRoom.zip

    在"WebSocket 聊天室 chatRoom.zip"这个项目中,开发者使用了Go语言(golang)来构建一个基于WebSocket的实时聊天应用。 1. **WebSocket API**: WebSocket API 是HTML5引入的一种技术,使得Web应用程序可以实现低...

    chatroom.tar.gz

    标题中的"chatroom.tar.gz"是一个压缩文件,其中包含了一个简单的Linux聊天室应用程序。让我们深入探讨这个聊天室实现可能涉及的技术和概念。 1. **网络编程**: - **套接字(Sockets)**:网络通信的基础,是进程...

    chatroom.zip

    【标题】"chatroom.zip" 是一个包含了基于WebSocket技术实现的简单聊天室项目的压缩包。这个项目使用了Java后端的主流技术栈,包括Spring、SpringMVC和MyBatis(SSM)进行整合,数据库选择了MySQL,服务器环境是...

    chatroom101:chatroom101.ga的开源代码-Chat source code

    【标题】"chatroom101:chatroom101.ga的开源代码-Chat source code"揭示了这是一个关于在线聊天室的开源项目,其源代码是公开的,允许用户研究、学习和改进。这个项目可能旨在创建一个实时的、交互式的聊天平台,让...

    a_c!s_chatroom.rar_Chatroom_chat_java程序

    【标题】"a_c!s_chatroom.rar_Chatroom_chat_java程序" 提供了一个Java编程实现的聊天室项目,这个程序旨在创建一个简单的、易于理解的在线交流平台。通过使用Java语言,开发者构建了一个功能基础但实用的聊天环境,...

    chatRoom_pack.zip

    P2P即时聊天系统,实现功能如下: 1) 点对点的单人聊天 2) 多人同时聊天 3) 用户可以自由加入和退出。 4)可以共享文件 混合P2P模式。系统开发主要涉及到socket编程技术和多线程技术。支持流Socket通信:...

    ChatRoom.zip

    总的来说,"ChatRoom.zip"项目是一个很好的学习和实践Linux下C语言socket编程、文件操作、守护进程以及日志记录的实例。通过理解并实现这样一个项目,开发者能够增强对网络通信、进程管理以及文件操作的理解,这对于...

    ChatRoom.rar

    通过研究这个`ChatRoom`项目,你不仅可以巩固Java基础,还能深入理解网络编程和多线程技术,对提升你的编程技能和解决实际问题的能力大有裨益。对于想要从事网络应用开发的Java程序员来说,这是一个很好的学习资源。

    chatroom-master.zip

    chatroom-master.zip

    chatroom.rar

    在这个"chatroom.rar"压缩包中,包含的是一份Java聊天室的实例代码,旨在演示客户端和服务端如何通过Socket进行通信,实现消息的发送与接收。 在TCP/IP协议栈中,Socket是提供进程间网络通信的接口,它允许两个运行...

    计算机网络的最终项目,一个用Python编写的聊天室,名为network pj chatroom.zip

    网鼎杯计算机网络的最终项目,一个用Python编写的聊天室,名为network pj chatroom.zip计算机网络的最终项目,一个用Python编写的聊天室,名为network pj chatroom.zip计算机网络的最终项目,一个用Python编写的聊天...

Global site tag (gtag.js) - Google Analytics