glib实现Socket通信

  • server
  • client
  • 编译

server

#include <glib.h>
#include <gio/gio.h>
#include <stdio.h>gchar *buffer;gboolean network_read(GIOChannel *source,GIOCondition cond,gpointer data)
{GError *error=NULL;gsize len;GString *s = g_string_new(NULL);const gchar *msg = "The price of greatness is responsibility.";GIOStatus ret = g_io_channel_read_line_string(source, s, NULL, &error);if (ret == G_IO_STATUS_ERROR){g_error ("Error reading: %s\n", error->message);g_object_unref(data);return FALSE;}else if (ret == G_IO_STATUS_EOF) {g_print("finished\n");return FALSE;}else {g_print("Got: %s\n", s->str);//writeret = g_io_channel_write_chars(source, msg, -1, &len, &error);g_io_channel_flush(source, NULL);if (ret == G_IO_STATUS_ERROR)g_error ("Error writing: %s\n", error->message);printf ("Wrote %u bytes.\n", len);return TRUE;}
}gboolean
new_connection(GSocketService *service,GSocketConnection *connection,GObject *source_object,gpointer user_data)
{// tell glib not to disconnectg_object_ref(connection);GSocketAddress *sockaddr = g_socket_connection_get_remote_address(connection, NULL);GInetAddress *addr = g_inet_socket_address_get_address(G_INET_SOCKET_ADDRESS(sockaddr));guint16 port = g_inet_socket_address_get_port(G_INET_SOCKET_ADDRESS(sockaddr));g_print("New Connection from %s:%d\n", g_inet_address_to_string(addr), port);GSocket *socket = g_socket_connection_get_socket(connection);gint fd = g_socket_get_fd(socket);GIOChannel *channel = g_io_channel_unix_new(fd);g_io_add_watch(channel, G_IO_IN, (GIOFunc) network_read, connection);return TRUE;
}int main(int argc, char **argv)
{GSocketService *service = g_socket_service_new();GInetAddress *address = g_inet_address_new_from_string("127.0.0.1");GSocketAddress *socket_address = g_inet_socket_address_new(address, 4000);g_socket_listener_add_address(G_SOCKET_LISTENER(service), socket_address, G_SOCKET_TYPE_STREAM,G_SOCKET_PROTOCOL_TCP, NULL, NULL, NULL);g_object_unref(socket_address);g_object_unref(address);g_socket_service_start(service);g_signal_connect(service, "incoming", G_CALLBACK(new_connection), NULL);GMainLoop *loop = g_main_loop_new(NULL, FALSE);g_main_loop_run(loop);
}

client

#include <glib.h>
#include <gio/gio.h>int main(int argc, char *argv[])
{GError *error = NULL;GSocketClient * client = g_socket_client_new();GSocketConnection * connection = g_socket_client_connect_to_host (client,"127.0.0.1",4000,NULL,&error);if (error){g_error(error->message);}else{g_message("Connection ok");}gchar *buffer="hello";gchar incoming_buff[100]={0};GInputStream * in_stream = g_io_stream_get_input_stream(G_IO_STREAM(connection));GOutputStream * out_stream = g_io_stream_get_output_stream(G_IO_STREAM(connection));g_output_stream_write(out_stream, buffer, 6, NULL, &error);int incoming_num = g_input_stream_read(in_stream,incoming_buff,100,NULL,&error);if(error)g_error(error->message);else{g_print("incoming: %s\n", incoming_buff);}return TRUE;
}

编译

 gcc -g  server.c -o server $(pkg-config --cflags --libs glib-2.0 gobject-2.0 gtk+-2.0)gcc -g  client.c -o client $(pkg-config --cflags --libs glib-2.0 gobject-2.0 gtk+-2.0)

glib实现Socket通信相关推荐

  1. python 网络编程之Socket通信案例消息发送与接收

    背景 网络编程是python编程中的一项基本技术.本文将实现一个简单的Socket通信案例消息发送与接收 正文 在python中的socket编程的大致流程图如上所示 我们来首先编写客户端的代码: # ...

  2. C# Socket系列三 socket通信的封包和拆包

    通过系列二 我们已经实现了socket的简单通信 接下来我们测试一下,在时间应用的场景下,我们会快速且大量的传输数据的情况! 1 class Program 2 { 3 static void Mai ...

  3. flex java socket通信

    引用:http://developer.51cto.com/art/201003/189791.htm Java socket通信如何进行相关问题的解答呢?还是需要我们不断的学习,在学习的过程中会遇到 ...

  4. Socket通信之操作系统的字节序和位数

    关于Socket通信过程中字节序 在网络编程里,网络字节序是big-endian的,而大部分的PC的系统都是X86处理器系列,X86采用的是little-endian,所以需要将网络数据流转换成本地数 ...

  5. 1.Socket通信

    本博客部分内容参考教程来自C语言中文网. 进入socket通信首先要了解两个概念,第一:服务器端,第二:客户端.(区别是两者的服务对象不同.服务器端是为客户端服务的,客户端就是为真正的"客户 ...

  6. java iso8583 socket 服务_JAVA客户端amp;服务器的socket通信

    JAVA客户端&服务器的socket通信 socket是两台主机之间的一个连接通道,它可以完成七个基本操作: 发送远程机器 发送数据 接收数据 关闭连接 绑定端口 监听入站数据 再绑定端口上接 ...

  7. 手把手教你 Socket 通信(TCP/IP)

    本文将给出完整 Socket 通信代码,在 eclipse 中亲测有效.在Android Studio中用Java开发也是一样的,只是把代码和控件搭配一下,注册监听就好. 网络上的两个程序通过一个双向 ...

  8. protobuf和socket通信简单实例

    protobuf和socket通信简单实例   protobuf是 Google 公司内部的混合语言数据标准,可以用来定义通信的协议,由于其有序列化和反序列化的操作,减小了存储或通信的数据量,从而达到 ...

  9. [其他]JAVA与C#的Socket通信

    在日常的开发中,不同的传感器支持的开发语言常常是不同的.例如Kinect一般是用C++开发的,Leapmotion用JAVA开发比较多. 去年暑假(17年暑假)做的一个项目是:用Leapmotion捕 ...

最新文章

  1. JQuery选择器大全
  2. thinkphp mysql缓存_ThinkPhp数据缓存技术
  3. 论CSS样式的使用以及常用属性
  4. Posterior decompression
  5. Linux expect与Shell交互
  6. Flowable 数据库表结构 ACT_HI_TASKINST
  7. xshell堡垒机_Jumpserver开源堡垒机管理
  8. Ubuntu12.04编译Android4.0.1源码全过程-----附wubi安装ubuntu编译android源码硬盘空间不够的问题解决
  9. Linux下修改系统时间并写入BIOS
  10. java 动态二维数组,菜鸟求助: 二维数组如何实现动态接收?
  11. 百度 | 2022年科技趋势预测
  12. 开源大数据生态下的 Flink 应用实践
  13. html a 的写法,HTML超链接a标记CSS样式写法示例
  14. 视频md5修改器苹果手机
  15. 假如斯诺登生活在2023年
  16. RK3066移动鼠标,有时会卡顿一会儿
  17. VC++ 利用MFC的CWindowDC类实现画线功能 在桌面窗口中画线 绘制彩色线条 CPen nPenStyle nWidth crColor
  18. mysql按首字母查询_按照首字母搜索功能(mysql数据库执行语句)
  19. 【算法面试】leetcode最常见的150道前端面试题 --- 中等题
  20. The longest zig-zag subsequence

热门文章

  1. c# 实现语音播报功能 转发
  2. 服务器UDIMM, LRDIMM,RDIMM三种内存的区别
  3. 一周XX思考(第12期)
  4. Python程序设计(第三版)约翰·策勒 编程练习课后答案(第二章)
  5. subplots_adjust()函数--matplotlib
  6. 本周最新文献速递20211121
  7. SpringBoot单元测试的@RunWith与@SpringBootTest注解
  8. win10切换视图快捷键and其他
  9. 如何从一个XtraBackup完整备份中恢复一个InnoDB表
  10. 字母重排(算法竞赛入门经典)