• 6637阅读
  • 4回复

QT 网络编程问题,请指教 [复制链接]

上一主题 下一主题
离线zusen
 
只看楼主 正序阅读 楼主  发表于: 2010-08-31
— 本帖被 XChinux 执行加亮操作(2010-09-03) —
在QT里,调用了WIN的API,并不是用QT封装的socket

但出现了问题,,有人问我,为什么不用QT封装的socket?这是因为我调用了C写的DLL(自己的网络协议)

引用头文件

#include <QtGui/QApplication>
#include "mainwindow.h"
#include <windows.h>
#include <stdio.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <unistd.h>



int MainWindow::svrver()
{
    struct hostent *host;
    struct sockaddr_in server_addr;
    char url[]="192.168.0.2";
    char tcplient_ok;
    int client_sock;
   // host = ::gethostbyname(url);
    if ((client_sock = ::socket(AF_INET, SOCK_STREAM, 0)) == -1)
       {
           return -1;
       }


就在socket(AF_INET, SOCK_STREAM, 0))  返回的是 -1
并不能获取一个socket,,请问那里出错呢??
在QT里,调用WIN的API,有什么讲究吗???


多谢解答
离线zusen
只看该作者 4楼 发表于: 2010-08-31
还有一点奇怪的是,QT信号连接函数connect 和 socket 的connect 同名,QT 干嘛不用Q 开头呢,呵呵

解决方法 ::connect , 这样就可以区分开来了
离线zusen
只看该作者 3楼 发表于: 2010-08-31
#pragma comment( lib, "ws2_32.lib" )
这个可以不引用,呵呵
离线zusen
只看该作者 2楼 发表于: 2010-08-31
用封装的库应该问题不大,但我做的是调用DLL的函数实现网络功能,DLL我是用C写的,这样可以其他程序也可以调用这个DLL,而不用理网络的底层编程,呵呵
已解决问题

#pragma comment( lib, "ws2_32.lib" )

调整用WSAStartup 初始化,这样就可以了
离线XChinux

只看该作者 1楼 发表于: 2010-08-31
在win32下使用win32 socket api与linux下的有些不同吧。最好先搜索一下相关帖子吧。
另外,建议使用已封装过的跨平台socket库。如qt的,asio的等等。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个