- 论坛徽章:
- 0
|
我想实现两个textview窗口下的数据传输,想先在本机实验,网络通信使用线程处理。可是编译没有错,总是运行时显示段错误。
这只是我要做东西的很小一部分,这个调不通,没法继续啊,跪求大家一下。如果大家帮我解决了北京海淀区内的请吃饭,谢谢,下面是我的程序:
其中on_button1_clicked和on_button2_clicked是两个按键的响应函数,一个发送键一个接收键。
void
on_button1_clicked (GtkButton *button,
gpointer user_data)
{
int socket_send();
char *text,str1[1000];
text=str1;
GtkTextIter start, end;
pthread_t thrd1;
extern GtkTextBuffer *buffer2;
gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(buffer2),&start,&end);
const GtkTextIter s=start, e=end;
text=gtk_text_buffer_get_text(GTK_TEXT_BUFFER(buffer2),&s,&e,FALSE); //获取第一文本窗口的字符
//write into file 写入一文件中
FILE *f;
f=fopen("/mnt/log","w");
rewind(f);
if(fwrite(text,sizeof(gchar),strlen(text),f)==0)
{
g_print("no words transmit\n");
}
rewind(f);
int rst=pthread_create(&thrd1,NULL,(void *)&socket_send,text); //发起网络通信线程
if(rst!=0)
{
g_print("pthread1 create failed\n");
}
fclose(f);
}
void
on_button2_clicked (GtkButton *button,
gpointer user_data)
{
char *host_name="192.168.0.110"; //建立socket通信,接收数据
int port=8000;
char *buf,str3[100];
buf=str3;
int socket_descriptor;
struct sockaddr_in pin;
struct hostent *server_host_name;
if((server_host_name=gethostbyname(host_name))==0)
{
g_print("Error resolving local host\n");
exit(1);
}
bzero(&pin,sizeof(pin));
pin.sin_family=AF_INET;
pin.sin_addr.s_addr=htonl(INADDR_ANY);
pin.sin_addr.s_addr=((struct in_addr *)(server_host_name->h_addr))->s_addr;
pin.sin_port=htons(port);
if(socket_descriptor=socket(AF_INET,SOCK_STREAM,0)==-1)
{
g_print("Error in socket funciton\n");
exit(1);
}
if(connect(socket_descriptor,(void *)&pin,sizeof(pin))==-1)
{
g_print("Error in connect function\n");
exit(1);
}
if(recv(socket_descriptor,buf,100,0)==-1)
{
g_print("Error in recv function\n");
exit(1);
}
int s=strlen(buf);
buf='\0';
extern GtkTextBuffer *buffer1; //显示在另一个窗口上
GtkTextIter start, end;
gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(buffer1),&start,&end);
gtk_text_buffer_insert(GTK_TEXT_BUFFER(buffer1),&start,buf,s+1);
}
nt port=8000;
int socket_send(char *buf)
{
struct sockaddr_in sin;
struct sockaddr_in pin;
int sock_descriptor;
int temp_sock_descriptor;
int address_size;
int i,len;
sock_descriptor=socket(AF_INET,SOCK_STREAM,0);
if(sock_descriptor==-1)
{
g_print("socket function failed\n");
exit(1);
}
bzero(&sin,sizeof(sin));
sin.sin_family=AF_INET;
sin.sin_addr.s_addr=INADDR_ANY;
sin.sin_port=htons(port);
if(bind(sock_descriptor,(struct sockaddr *)&sin,sizeof(sin))==-1)
{
g_print("bind function failed\n");
exit(1);
}
if(listen(sock_descriptor,20)==-1)
{
g_print("listen function failed\n");
exit(1);
}
while(1)
{
temp_sock_descriptor=accept(sock_descriptor,(struct sockaddr *)&pin,&address_size);
if(temp_sock_descriptor==-1)
{
g_print("accept function failed\n");
exit(1);
}
len=strlen(buf);
if(send(temp_sock_descriptor,buf,len,0)==-1)
{
g_print("send function failed\n");
exit(1);
}
close(temp_sock_descriptor);
}
}
[ 本帖最后由 buaazhangy 于 2007-11-27 10:57 编辑 ] |
|