纯C与QT通过socket通信
来源:互联网 发布:阿里云学生认证 高中生 编辑:程序博客网 时间:2024/06/05 10:59
转载自 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;
}
}
- 纯C与QT通过socket通信
- QT前台与后台程序通过socket通信
- Android(客户端)通过socket与QT(服务端)通信
- php和c通过socket进行通信
- php和c通过socket进行通信
- c 和 java 通过 socket 进行通信
- Flex Socket 与 C# 通信
- socket编程 与c通信
- QT使用socket与java通信
- c#与java通过socket通信
- flex与twisted通过socket通信
- Android客户端通过socket与服务器通信
- Android手机通过socket与pc通信
- Flash/AS3与C++通过socket通信
- Android手机通过socket与pc通信
- Flash/AS3与C++通过socket通信
- Flash/AS3与C++通过socket通信
- Android客户端通过socket与服务器通信
- AS3 纯代码打造不规则遮罩,透明区域不操作
- linux 命令大全
- 认真思考创建对象的几种方式
- js 变量
- Android 设备按键映射更改
- 纯C与QT通过socket通信
- C# 截取上传flv文件中其中一帧图片
- 各种学习博客
- JSTL标签+EL表达式遍历List内容
- 我的学习之旅(8) Makefile
- 安卓--操作资源文件
- 深入设计模式-3.抽象工厂模式
- 音频编码介绍汇总
- iOS6的旋屏控制技巧