我再次陷入困境。
剧本 :
#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库,然后将其编译并作为服务器运行,但是当im tryin从“ telnet”发送消息时,它崩溃了,如何使这些东西起作用?
最终,是否有关于GSocket的适当文档?
最佳答案
当您使用g_socket_receive ()接收数据时,会将原始数据放入buf。现在,printf用于打印以null终止('\ 0')的字符串;但是,buf中的数据不是以空值结尾的,并且会使printf崩溃。
有关GSocket API参考,请参见http://library.gnome.org/devel//gio/stable/GSocket.html。