纯C与QT通过socket通信

转载自 http://david4383.lofter.com/post/1cbffe05_39cfee1

最近使用linphone,linphone是使用C编写的,他写的linphonec可以比较简单的实现通讯,因此想在这个基础上做些修改,应用到项目中去,最紧要的就是如何让纯C的LINPHONE与QT通讯,QT是C++的这个,因此C与C++的数据交换还是有些问题的,最终采用SOCKET通讯,很好很快的实现了功能。

主要代码如下:

纯C中,

void initsocket()

{

  int len;

  struct sockaddr_in address;

  int result;

  int i;

  struct sockaddr_un sa;

  char *servername="/tmp/AAA";

  if((sockfd = socket(AF_UNIX,SOCK_STREAM,0))==-1)

  {

      perror("socket error");

      exit(EXIT_FAILURE);

  }

  sa.sun_family=AF_UNIX;

  strncpy(sa.sun_path,servername,sizeof(sa.sun_path)-1);

  if((result = connect(sockfd,(struct sockaddr *)&sa,sizeof(sa)))==-1)

  {

      perror("connect error");

      exit(EXIT_FAILURE);

  }

  char *abc="abcdefg!";

  printf ("socket is sendab.\n");

  socketsend(abc);


  printf ("socket is sendbb.\n");

}

int socketsend(char *dat)

{

//    int byte;

//    if((byte=send(sockfd,dat,100,0))==-1)

//    {

//        return 0;

//    }

//    return 1;

    write(sockfd,dat,100);

}

先使用initsocket进行初始化,然后在需要的地方调用socketsend,或者直接wirte也可以。


在QT中使用QLocalServer来进行通讯就比较方便了,代码如下

先在头文件中定义:

public:

    QLocalServer *m_pServer;

    QLocalSocket *m_pSocket;

private slots:

    void newConnectionSlot();

    void dataReceived();


初始化函数中实现初始化。

    m_pServer=new QLocalServer(this);

    connect(m_pServer,SIGNAL(newConnection()),this,SLOT(newConnectionSlot()));

    if(m_pServer->listen("AAA"))

    {

        qDebug()<<"Open Server is succeed";

    }

    else

    {

        qDebug()<<"Open Server is failed";

    }

以上部分是初始化。

以下部分是实现两个槽函数。

void Widget::newConnectionSlot()

{

    qDebug()<<"Have a Socket Connect server";

    m_pSocket=m_pServer->nextPendingConnection();

    connect(m_pSocket,SIGNAL(disconnected()),m_pSocket,SLOT(deleteLater()));

    connect(m_pSocket,SIGNAL(readyRead()),this,SLOT(dataReceived()));

}

void Widget::dataReceived()

{

    while(m_pSocket->bytesAvailable())

    {

        QString vTemp;

        vTemp=m_pSocket->readLine();

        qDebug()<<"The receive data is:"<<vTemp;

    }

}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt是一个跨平台的GUI库,其中包含网络通信方面的工具类,例如Qt网络模块提供了许多用于网络编程的类和函数。在Qt网络模块中,可以使用QTcpSocket类和QUdpSocket类来实现TCP和UDP协议的网络通信。 C++是一种面向对象的编程语言,可以用于开发各种类型的应用程序。Qt网络模块提供的类和函数是使用C++编写的。 Socket是一种网络编程的概念,它是一组用于网络通信的API。基于Socket编程,可以实现不同主机之间的通信,比如客户端和服务器之间的通信。 综上所述,Qt C++中的Socket编程是指使用Qt网络模块提供的QTcpSocket类和QUdpSocket类来实现TCP和UDP协议的网络通信。通过Socket编程,可以实现客户端和服务器之间的通信,以及不同主机之间的数据传输。使用Qt C++进行Socket编程,可以实现跨平台的网络通信,包括Windows、Linux等操作系统平台。 ### 回答2: Qt是一款跨平台的GUI应用程序开发框架,能够快速开发高质量的界面应用程序。而C语言是一种通用、高效的编程语言,二者结合使用可以开发出高效、可靠的应用程序。 Socket(套接字)是一种通信协议,用于在不同的计算机之间进行通信。在Qt中,可以使用Qt网络模块来实现套接字通信Qt网络模块提供了一个QTCPSocket类,它允许应用程序像创建文件描述符一样创建套接字,并使用类似I/O的方式来发送和接收数据。 通过使用QTCPSocket类,我们可以轻松地实现TCP/IP协议的通信,如实现客户端和服务器之间的通信。在客户端中,我们可以使用QTCPSocket类创建一个套接字对象,并连接到服务器;而在服务器端,我们可以使用QTCPServer类监听客户端的连接请求,并在收到连接请求后创建一个QTCPSocket对象实现双向通信。 总之,Qt C Socket提供了一种方便、快捷的方式来实现套接字通信,适用于需要进行网络通信的各种应用程序开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值