c - gsocket(服务器模式)出现错误?

标签 c sockets glib

我又遇到了一些问题..

脚本:

#include <stdio.h>
#include <stdlib.h>
#include <gio/gio.h>
#include <netdb.h>
/*
 * 
 */

static GSocket *sock;
    static GError *err = NULL;

void klwar()
{
    g_socket_close(sock,&err);
}

int main(int argc, char** argv) {


    GSocketAddress *gsockaddr;
    struct sockaddr_in sockaddr;
    sockaddr.sin_family = AF_INET;
    sockaddr.sin_port = htons(1221);
    sockaddr.sin_addr.s_addr = INADDR_ANY;

    g_type_init();
    gsockaddr = g_socket_address_new_from_native(&sockaddr,sizeof(sockaddr));

    sock = g_socket_new(G_SOCKET_FAMILY_IPV4,G_SOCKET_TYPE_STREAM,G_SOCKET_PROTOCOL_TCP,&err);

    g_socket_bind(sock,gsockaddr,TRUE,&err);

    g_socket_listen(sock,&err);

    char buff[123];

    atexit(klwar); //avoiding 

    GSocket *ja;


    while(ja = g_socket_accept(sock,NULL,&err))
    {

    gssize a = g_socket_receive(ja,buff,123,NULL,&err);
        printf("data : %s\n",buff);

    }

    return (EXIT_SUCCESS);
}

在这里,我打算建立TCP连接和局域网,但同样,我必须使用像GSOCKET这样的gnome库,然后它编译,作为服务器运行,但是当我尝试从“telnet”发送消息时,它崩溃了,如何让这些东西发挥作用?

最后,GSocket 有合适的文档吗?

最佳答案

当您通过 g_socket_receive () 接收数据时,它将原始数据放入buf中。现在, printf 用于打印以 null 结尾('\0')的字符串;然而,buf 中的数据不是以 null 终止的,这会导致 printf 崩溃。

参见http://library.gnome.org/devel//gio/stable/GSocket.html GSocket API 引用。

关于c - gsocket(服务器模式)出现错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5053340/

相关文章:

c - 在 C 中将值插入二叉搜索树?

c - MS-DOS 套接字库(C 语言)

binding - 使用 GIR 为 D 绑定(bind) gobject/gnome/glib?

c - 将 wordexp 的输出提供给 getopt_long 会使我的 linux cli 应用程序崩溃

C 代码无法输出 long long int 的正确数字

c - 带管道 C 的 sscanf

c - 由于内存耗尽而从 NULL == malloc() 恢复的策略

node.js - 如何在没有使用 socketio-jwt 进行身份验证的情况下发出和接收

c# - 持续监控设备是否通过IP连接

c - 如何在菜单项上捕获 gtk 滚动事件