首页| 论坛| 消息

标题:Qt的函数和Linux的函数
作者:melodyarm
日期:2006-09-17 10:07
内容:

void Form1::sendText()
{
QString s1;
s1=textEdit1->text();
//--------------------------------------------------------------------------------------



if ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket");
exit(1);
}
my_addr.sin_family=PF_INET;
my_addr.sin_port=htons(myport);
my_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(my_addr.sin_zero), 0);
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) {
perror("bind");
exit(1);
}

if (listen(sockfd, lisnum) == -1) {
perror("listen");
exit(1);
}
while(1) {
sin_size = sizeof(struct sockaddr_in);
new_fd=accept(sockfd,(struct sockaddr*)&their_addr,&sin_size);
if (new_fd==-1)
{
perror("accept");
continue;

}

printf("server: got connection from %s\n",inet_ntoa(their_addr.sin_addr));
if (!fork()) {
if (send(new_fd, s1, 14, 0) == -1) {
perror("send");
close(new_fd);
exit(0);
}
}
close(new_fd);
waitpid(-1,NULL,WNOHANG);
}

//--------------------------------------------------------------------------------------------


}
这段程序就是把textEdit1控件的内容发送出去,初学socket编程,出现的错误是:no matching function for call to "accept()",发送字符串的代码在在别的程序中测试通过了,调用accep ..


#1 [seasonx 09-17 15:48]
这个不是qt下的socket编程,qt有自己的类!
#2 [style 09-17 17:15]
1)
#include

2)
send(new_fd, s1, 14, 0) ;
函数原型是
send(int, const char *, int, int);
而s1是QString对象.并不是char*
qt能用到QString的地方都基本能用到char *,即qt/QString兼容C语言的char *
而C语言要用到char *的地方就不能用QString...即c/char*不兼容QString
更简单的说/
在C语言函数中,如果形参是char*,那么实参就必须为char*,而不能用QString
在QT库成员函数中,如果形参是QString,实参可以用QString,也可以用char*
所以楼主程序需要把QString转换成char *类型再带到send()参数中
#3 [melodyarm 09-19 21:12]
这里好像不是send的问题,问题解决以后并没有做QString到char*的转换,我是在Qt中用的Linux的socket编程,当然也可以用Qt的socket的编程,主要是初学嘛,刚刚学会Linux的socket的编程,接下来会尝试Qt的socket的编程的。
问题是这样解决的:把两个//---------之间的代码剪切放到一个sendfuc.cpp文件中,相应编辑一个sendfuc.h文件,也就是说把Linux socket的编程的代码和Qt的代码分开,只是在
void Form1::sendText()
{
//QString s1; //注释掉,然后在sendfuc.h中把s1 定义为全局的
s1=textEdit1->text();
之后调用sendfuc();
这里把是s1定义成全局的变量了,在sendfuc()函数中的send(new_fd, s1, 14, 0) 引用s1做参数。
谢谢各位的解答,把最后解决的方法贴出来了,望以后还要多多指教!
#4 [style 09-19 21:47]
有点不敢相信...C语言函数参数能接受QString
那你试试
QString s1;
s1 = textEdit1->text();
printf("%s",s1);

回复 发表
主题 版块