关闭

QT+网络编程。。适合出学者

标签: qt编程网络structserverbuffer
731人阅读 评论(0) 收藏 举报
分类:


                                                                       广工10级

转载请标明来源:http://blog.csdn.net/shiyi_2012/article/details/7391099


先看一下实现的效果:


我的这个qt是客户端,只负责接收数据,所以需要一个服务端来发数据。对于服务端,后面我有提供一个服务端程序,大家也可以随便找一个都可以,只要有发送数据就可以的啦。由图可知,这个qt客户端既可以接受同一台计算机同一个系统的服务端发送的数据,也可以是来自不同系统、不同计算机的服务端程序发送的数据。我们主要是说怎样实现客户端的程序,10行代码就可以啦,是不是很简单。。。。

对于这个程序很简单就可以实现的,首先用designer设计一个窗口,里面放一个按键,一个lineEdit部件和一个listBox就可以啦。按键用信号与槽机制(菜单的connection)与一个函数(我的是connect( )函数)挂钩,该函数的代码填充如下:

#define PORT "5555"
#define MAXDATASIZE 125


#include <qvariant.h>
#include <qdialog.h>
#include <qsocketdevice.h>
#include <qhostaddress.h>

void Form1::Connect()
{
 char buf[MAXDATASIZE];
 QSocketDevice *sockfd;     //定义套接字
 QHostAddress their_addr;  //.定义地址
 
 sockfd = new QSocketDevice(QSocketDevice::Stream);  //初始化套接字
 
 their_addr.setAddress( lineEdit1->text() );  //获取地址

sockfd->connect(their_addr,atoi(PORT));   //绑定地址与端口号


 sockfd->readBlock(buf,MAXDATASIZE);  //接收数据
 printf("******buf == %s\n",buf);     //在总端显示数据

 listBox1->insertItem(buf);   //在标签显示数据
 
}

注意:

1.部件的名字要和程序对应啊。。如:lineEdit1、listBox1

2.服务程序端口号要和服务端对应,我这里都是5555.


然后保存就可以啦。。。。

最后在总端执行qmake以及make就产生可执行文件,执行该文件即可。。。

当然加上汉化,就更好看啦,关于如何汉化,很简单,我的上篇文章就写了。。。。


附上我的服务端程序:

/*server.c*/
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <netinet/in.h>


#define PORT 5555
#define BUFFER_SIZE 1024
#define MAX_QUE_CONN_NM 5


int main()
{
struct sockaddr_in server_sockaddr, client_sockaddr;
int sin_size, sendbytes;
int sockfd, client_fd;
char buf[BUFFER_SIZE];


if ((sockfd = socket(AF_INET,SOCK_STREAM,0))== -1)   return;           //socket函数
printf("Socket id = %d\n",sockfd);


server_sockaddr.sin_family = AF_INET;
server_sockaddr.sin_port = htons(PORT);
server_sockaddr.sin_addr.s_addr = INADDR_ANY;
bzero(&(server_sockaddr.sin_zero), 8);
if (bind(sockfd, (struct sockaddr *)&server_sockaddr, sizeof(struct sockaddr))== -1)  return;  //bind绑定函数
printf("Bind success!\n");


if (listen(sockfd, MAX_QUE_CONN_NM) == -1)  return; //listen侦听函数
printf("Listening....\n");

while(1){
if ((client_fd = accept(sockfd, (struct sockaddr *)&client_sockaddr, &sin_size)) == -1)   return;//accept接收函数  
memset(buf , 0, sizeof(buf));


if ((sendbytes = send(client_fd,"long ge long ge", BUFFER_SIZE, 0)) == -1)     return;//send发送函数

printf("send a message: %s\n", buf);
}

return;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:39788次
    • 积分:544
    • 等级:
    • 排名:千里之外
    • 原创:15篇
    • 转载:0篇
    • 译文:0篇
    • 评论:3条
    文章分类
    文章存档
    最新评论