QT的socket编程
① Qt Socket编程 服务器端总返回 QIODevice::write: device not open
是你的服务器的端口没有打开。。。。
② Qt Socket网络编程 服务器端提示QIODevice::read (QTcpSocket): device not open,但是与客户端连接成功
这是因为文件路径不对造成的,解决方法如下:
1、首先pro文件配置:Qt网络功能需要在pro文件增加网络库。
③ QT编程可以用sys/socket.h这个头文件吗,怎么我的QT5找不到这个头文件,我的是wind
Qt里用的是#include<QSocket>
④ QT 编程QTcpSocket 类write函数
if(m_httpAddress.isEmpty() || sendBuffer.isEmpty())
{
return 0;
}//服务器地址或者需要发送的数据为空直接返回
QTcpSocket socket;
socket.connectToHost(m_httpAddress, m_httpPort);//建立一个TCP连接,主机地址是m_httpAddress,端口号是httpPort
socket.setSocketOption(QAbstractSocket::LowDelayOption, 1);//优化为最低延迟,后面的1代码启用该优化。
if (!socket.waitForConnected())
{
return 0;
}
//等待连接,如果超过3s没有客户端连接将退出。
socket.write(sendBuffer);//开始传输数据
socket.waitForBytesWritten();
while (socket.waitForReadyRead(60000))//在6s内完成数据的传输
{
while (socket.bytesAvailable())
{
receiveBuffer += socket.readAll();
}//如果传输数据不为0,那么接受数据buffer加上该值
}
socket.close();//关闭I/O数据传输以及Tcp连接,并重置主机名和端口号
⑤ QT 多进程 socket 编程 例子 或 参考资料 谢谢
Unix平台下就用Unix API的那一套socket和互斥与条件变量函数,windows就用WIN32提供的那一套API函数不好吗?挺好用的啊?为什么一定要QT自己的,他也只是封装了一下啊,底层还是一样调用他们的啊。我现在把QT源码给你,看你自己能理解多少了?
http://yunpan.cn/QeEWMdNVAk27s
⑥ Qtsocket编程问题 QSocketDevice在哪个头文件里顺便,写这种程序要包含哪些头文件
这个最新的版本没有这个东西,我找了,找不到,只有QSocketDevice这个类有,具体对应的头文件在<Q3Support/q3socketdevice.h>
⑦ 如何在qt中使用connect指令来写socket
C/C++ code/*server.h 就是server的头文件*/
#ifndef SERVER_H
#define SERVER_H
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <netinet/in.h>
#include <netdb.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/select.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <qstring.h>
#include <qapplication.h>
#include <qthread.h>
#include <qsignal.h>
#include <qobject.h>
#include <qvariant.h>
#include <qdialog.h>
#include <qwidget.h>
#include "userevent.h"
#include "VPN_usr.h"
//# define RECVBUF 140
//# define BACKLOG 10
typedef struct data
{
char command[20];
char parm[20];
char context[100];
}Data;
class server : public QThread
{
public:
int new_fd;
unsigned char from_client[140];
UserEvent *usre;
QString str;
QObject test;
void set_target(QWidget *parent);
server();
~server();
void run();
void stop();
void VPN_encrypt_send();
void VPN_certification_send();
private:
Data pData;
volatile bool stopped;
QWidget *parent_m;
int err;
unsigned char c;
int i;
int reclen;
int sockfd;
int namelen;
int portnum;
int sin_size;
int addrsize;
struct sockaddr_in server_addr,client_addr,addr;
unsigned char to_client[140];
};
#endif
/*server.cpp */
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <netinet/in.h>
#include <netdb.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/select.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <qapplication.h>
#include <qthread.h>
#include <qsignal.h>
#include <qobject.h>
#include <qdialog.h>
#include <qvariant.h>
#include"encrypt.h"
#include"certification.h"
#include "VPN_usr.h"
#include"server.h"
#include "userevent.h"
server::server()
{
portnum=5554;
stopped= false;
err=0;
new_fd=0;
if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
{
printf("error in socket!\n");
err=1;
}
namelen=sizeof(struct sockaddr_in);
bzero(&server_addr,namelen);
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(portnum);
server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
bzero(&(server_addr.sin_zero),8);
if ((bind(sockfd, (struct sockaddr *)(&server_addr), namelen))<0)
{
printf(" error in binding!\n");
err=1;
}
printf("Already bind\n");
}
server::~server()
{
stopped =true;
}
void server::run()
{
while(!stopped)
{
if ((listen(sockfd, 10))<0)
{
printf(" error in listening!\n");
err=1;
}
printf("Listening now\n");
if((new_fd=accept(sockfd,(struct sockaddr *)(&client_addr), (socklen_t *)&sin_size))<0)
{
printf("error in accept!\n");
err=1;
}
if(new_fd!=0)
printf(" connected with client!\n");
printf("Starting communication with client %s .\n",inet_ntoa(client_addr.sin_addr));
addrsize=sizeof(struct sockaddr_in);
getpeername(new_fd,(struct sockaddr*)&addr,(socklen_t *)&addrsize);
bzero(to_client, 140);
bzero(from_client, 140);
if(recv(new_fd,&c,1,MSG_PEEK)==-1)
{
printf(" Error when accept data from client!\n");
close(new_fd);
}
if(c==0xff)
{
i=0;
while((reclen=recv(sockfd,&c,1,0)) > 0 && c!=0xfe)
{
from_client[i++]=c;
}
if(reclen<0)
{
printf(" Error when accept more data from client!\n");
close(new_fd);
}
else if(c==0xfe)
from_client[i]=c;
switch(from_client[1])
{
case 0x0a:
printf("receive sa data from client.\n");
//emit show_sa();
//QApplication::postEvent(parent_m, usre);
break;
default:
printf("the data is does not follow the protocal.\n");
break;
}
}
}
stopped = false;
}
void server::stop()
{
stopped =true;
}
/*其他的内容对你来说也没用了*/
⑧ qt socket编程问题,不能接收数据,懂的帮忙解答一下,谢谢了。
接收函数内,一开始就readAll(),已经把数据都读取了,所以后面就没有可读数据了,所以后面不用判断bytesAvaliables()。
接收的时候,不要直接接收到QString中。应该先读取一个长度值(quint16),再根据长度值去读取QByteArray,再把读取到的QByteArray放到QString中。然后再判断bytesAvaliables是否还有剩余。有剩余,就再接收长度值+QByteArray。。。。
⑨ qt socket 网络编程,不知道哪出了问题
倒数第二句应该是std::cout<<string.toStd(String().length());吧。