基於Glib的網路實現示例
Glib簡介
Glib庫是C語言的好夥伴,整體設計的非常好!
但是,Glib的例子非常少. 不容易學習和借鑑.
這裡的例子就是採用glib的高層網路API實現的TCP服務端和客戶端.
以下例項都是正常執行的程式碼
TCP服務端程式碼例項:
#include <glib.h>
#include <gio/gio.h>
gchar *buffer;
gboolean
network_read(GIOChannel *source,
GIOCondition cond,
gpointer data)
{
GString *s = g_string_new(NULL);
//error should be inited with NULL
GError *error=NULL;
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);
//you should return this
return TRUE;
}
}
gboolean
new_connection(GSocketService *service,
GSocketConnection *connection,
GObject *source_object ,
gpointer user_data)
{
// tell glib not to disconnect
g_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, NULL);
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);
}
TCP客戶端程式碼例項:
#include <glib.h>
#include <gio/gio.h>
#include <stdio.h>
#include <string.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,"10.9.27.15",5000,NULL,&error);
GSocketConnection * connection = g_socket_client_connect_to_host (client,"localhost",9100,NULL,&error);
if (error){
g_error(error->message);
}else{
g_message("Connection ok");
}
guint8 buffer[]={170, 255, 255, 1, 204, 125, 128};
guint8 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, 7, NULL, &error);
int incoming_num = g_input_stream_read(in_stream,incoming_buff,100,NULL,&error);
if(error)
g_error(error->message);
else{
int i=0;
printf("incoming:\n");
for(;i<incoming_num;i++)
printf("%hhX ",incoming_buff[i]);
printf("\n");
//g_message(incoming_buff);
}
return TRUE;
}
相關推薦
基於Glib的網路實現示例
Glib簡介 Glib庫是C語言的好夥伴,整體設計的非常好! 但是,Glib的例子非常少. 不容易學習和借鑑. 這裡的例子就是採用glib的高層網路API實現的TCP服務端和客戶端. 以下例項都是正常執行的程式碼 TCP服務端程式碼例項: #
用TensorFlow基於神經網路實現井字棋(含程式碼)
為了展示如何應用神經網路演算法模型,我們將使用神經網路來學習優化井字棋(Tic Tac Toe)。明確井字棋是一種決策性遊戲,並且走棋步驟優化是確定的。 開始 為了訓練神經網路模型,我們有一系列優化的不同的走棋棋譜,棋譜基於棋盤位置列表和對應的最佳落子點。考慮到棋盤的對稱性,通
ufldl 深度學習入門 第一發:基於BP網路實現稀疏自編碼器
目的:打算使用深度學習的方式實現人臉關鍵點的檢測,第一步是要學習深度學習。 步驟:第一步在ufldl上面學習深度學習的演算法基礎知識,然後找部落格上基於python呼叫theano庫實現人臉關鍵點檢測的演算法,看懂後基於C++實現,然後用java實現app,呼叫C++實現的
python基於神經網路實現人臉識別
一.專案簡介 1.資料 需要資料QQ聯絡:1209028652 資料集:總共資料集由兩部分組成:他人臉圖片集及我自己的部分圖片 自己圖片目錄:face_recog/my_faces 他人圖片目錄:face_recog/other_faces 我的測試圖片目錄:face_r
BP神經網路基於Tensorflow的實現(程式碼註釋詳細)
BP(back propagation)神經網路是1986年由Rumelhart和McClelland為首的科學家提出的概念,是一種按照誤差逆向傳播演算法訓練的多層前饋神經網路,是目前應用最廣泛的神經網路。 在一般的BP神經網路中,單個樣本有m個輸入和n個輸出,在輸入層
基於HttpClient4.5實現網路爬蟲
個人部落格站已經上線了,網址 www.llwjy.com ~歡迎各位吐槽~-------------------------------------------------------------------------------------------------
基於粒子群演算法的概率神經網路實現多分類(PSO_PNN)
基於粒子群演算法的概率神經網路實現多分類:用粒子群演算法(PSO)實現概率神經網路中(PNN)的引數spread的最優化,並用PNN實現訓練並測試多類別資料,多分類效果很棒,有需要請聯絡[email protected],需要一定費用。
基於卷積神經網路實現圖片風格的遷移 3
實現圖片的風格轉換 一、實驗介紹 1.1 實驗內容 上一節課我們介紹了經典的CNN模型 VGG ,以及影象風格遷移演算法的基本原理。本節課我們將使用另外一個經典的模型 GoogLenet 來實現我們的專案(這是由於環境的限制,用 googlenet可以更快的完成我們的風格轉換),如果你完成了上節課的作業,那
深度學習之卷積神經網路CNN及tensorflow程式碼實現示例詳細介紹
一、CNN的引入 在人工的全連線神經網路中,每相鄰兩層之間的每個神經元之間都是有邊相連的。當輸入層的特徵維度變得很高時,這時全連線網路需要訓練的引數就會增大很多,計算速度就會變得很慢,例如一張黑白的 28×28 的手寫數字圖片,輸入層的神經元就有784個,如下圖所示:
深度學習之卷積神經網路CNN及tensorflow程式碼實現示例
一、CNN的引入 在人工的全連線神經網路中,每相鄰兩層之間的每個神經元之間都是有邊相連的。當輸入層的特徵維度變得很高時,這時全連線網路需要訓練的引數就會增大很多,計算速度就會變得很慢,例如一張黑白的 28×28 的手寫數字圖片,輸入層的神經元就有784個,如下圖
基於神經網路的目標檢測論文之目標檢測系統:實時路況檢測系統的設計與實現
注:本文源自本人的碩士畢業論文,未經許可,嚴禁轉載! 原文請參考知網:知網地址 第五章 實時路況檢測系統的設計與實現 物體識別技術被廣泛應用於人們的生產生活中。隨著深度學習與雲端計算的飛速發展,帶動了物體識別技術產生質的飛躍。高解析度影象和檢測的實時性要求越來越
RxEasyHttp一款基於RxJava2+Retrofit2實現簡單易用的網路請求框架
RxEasyHttp 本庫是一款基於Retrofit2+RxJava2實現簡單易用的網路請求框架,結合android平臺特性的網路封裝庫,採用api鏈式呼叫一點到底,整合cookie管理,多種快取模式,極簡https配置,上傳下載進度顯示,請求錯誤自動重試
基於卷積神經網路實現圖片風格的遷移 2
VGG與風格遷移演算法原理 一、實驗介紹 1.1 實驗內容 上節課我們學習了卷積神經網路的基本原理,本節實驗我們將學習用於影象風格遷移的經典的卷積神經網路模型VGG,並用caffe提供的 draw_net.py 實現模型的視覺化,本節實驗我們也將學習影象風格轉換的演算法原理。 1.2 實驗知識點 經典CNN
基於卷積神經網路實現圖片風格的遷移 1
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
基於PyTorch的LSTM長短時記憶網路實現MNIST手寫數字
本篇部落格主要介紹在PyTorch框架下,基於LSTM實現手寫數字的識別。在介紹LSTM長短時記憶網路之前,我先介紹一下RNN(recurrent neural network)迴圈神經網路.RNN是一種用來處理序列資料的神經網路,序列資料包括我們說話的語音、一段文字等等。它
機器學習實驗---人工神經網路MLP基於sklearn的實現
導語 上次寫了隨機森林的基於sklearn庫的大致實現步驟,這次我們來看看人工神經網路的實現步驟吧~ MLP就是多層感知器的意思,我們這裡也是通過引入MLPClassifier來實現的。 步驟詳解: 首先從sklearn中匯入MLPC 匯入待訓練的資料
基於CNN的驗證碼識別神經網路實現
一、前言 二、實戰 1、驗證碼生成 import random import numpy as np from PIL import Image from captcha.image import ImageCaptcha NUMBER = ['0', '1',
基於神經網路的2D攝像頭的手勢識別系統實現(一)
一、手勢識別的分類 若按照攝像頭的種類(2D攝像頭、深度攝像頭)來分,可分為兩類,1)基於2D攝像頭的二維手勢識別 和 2)基於3D攝像頭(如微軟的kinnect)三維手勢識別。早期的手勢識別識別是基於二維彩色影象的識別技術,所謂的二維彩色影象是指通過普通攝
吳恩達作業9:卷積神經網路實現手勢數字的識別(基於tensorflow)
提供資料集程式碼放在cnn_utils.py裡。 import math import numpy as np import h5py import matplotlib.pyplot as plt import tensorflow as tf from tensorfl
邊緣檢測︱基於 HED網路TensorFlow 和 OpenCV 實現圖片邊緣檢測
. 一、邊緣檢測 1、傳統邊緣檢測 Google 搜尋 opencv scan document,是可以找到好幾篇相關的教程的,這些教程裡面的技術手段,也都大同小異,關鍵步驟就是呼叫 OpenCV 裡面的兩個函式,cv2.Canny() 和 c