首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

怎么在qt中使用connect指令来写socket

2012-02-15 
如何在qt中使用connect指令来写socket?如何在qt中使用connect指令来写socket?我想用connect指令来设计sock

如何在qt中使用connect指令来写socket?
如何在qt中使用connect指令来写socket?

我想用connect指令来设计socket
但是 qt 自动把 connect 当成传递信号了 也就是qobject里面的connect了
请问我怎样才能用 connect 链接服务器呢?

[解决办法]

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;}/*其他的内容对你来说也没用了*/ 

热点排行