加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

在QT4下绑定TCP客户端的IP和端口 [bind QTcpSocket HOWTO]

(2017-04-13 16:48:25)
分类: QT开发
转自:在QT4下绑定TCP客户端的IP和端口 [bind QTcpSocket HOWTO]

he code is released under the terms of GNU Lesser General Public License version 2.1

Here's the code.

http://common.cnblogs.com/images/copycode.gif[bind QTcpSocket HOWTO]" />

 1 #ifndef Q_BOUND_TCP_SOCKET_H
2 #define Q_BOUND_TCP_SOCKET_H
3
4 #include
5
6
30
31 class QBoundTcpSocket : public QTcpSocket
32 {
33 public:
34
66 bool bindAndConnect(const QString &localAddr, quint16 localPort,
67 const QString &serverAddr, quint16 serverPort);
68 };
69
70 #endif
http://common.cnblogs.com/images/copycode.gif[bind QTcpSocket HOWTO]" />

 

http://common.cnblogs.com/images/copycode.gif[bind QTcpSocket HOWTO]" />

 1 #include "QBoundTcpSocket.h"
2
3 #ifdef Q_OS_LINUX
4 #include
5 #endif
6
7 bool QBoundTcpSocket::bindAndConnect(const QString &localAddr, quint16 localPort,
8 const QString &serverAddr, quint16 serverPort)
9 {
10 #ifdef Q_OS_LINUX
11 int sockfd;
12 int result;
13 struct sockaddr_in localSockAddr;
14 struct sockaddr_in serverSockAddr;
15 bzero(&localSockAddr, sizeof(localSockAddr));
16 bzero(&serverSockAddr, sizeof(serverSockAddr));
17
18 // create socket
19 sockfd = socket(AF_INET, SOCK_STREAM, 0);

20 if( sockfd == -1 )
21 {
22 qDebug() << "QBoundTcpSocket: Cannot create socket";
23 return false;
24 }
25
26 // bind
27 localSockAddr.sin_family = AF_INET;

28 localSockAddr.sin_port = htons(localPort);
29 localSockAddr.sin_addr.s_addr = inet_addr(localAddr.toLocal8Bit().data());
30
31 result = bind(sockfd, (struct sockaddr *)&localSockAddr, sizeof(localSockAddr));
32 if( result == -1 )
33 {
34 qDebug() << "QBoundTcpSocket: Cannot bind socket";
35 return false;
36 }
37
38 // connect
39 serverSockAddr.sin_family = AF_INET;

40 serverSockAddr.sin_port = htons(serverPort);
41 serverSockAddr.sin_addr.s_addr = inet_addr(serverAddr.toLocal8Bit().data());
42
43 result = ::connect(sockfd, (struct sockaddr *)&serverSockAddr, sizeof(serverSockAddr));
44 if( result == -1 )
45 {
46 qDebug() << "QBoundTcpSocket: Cannot connect to server";
47 return false;
48 }
49
50 // set socket descriptor
51 if( !setSocketDescriptor(sockfd, QAbstractSocket::ConnectedState))

52 {
53 qDebug() << "QBoundTcpSocket: Cannot set socket descriptor";
54 return false;
55 }
56
57 return true;
58 #else
59 qDebug() << "QBoundTcpSocket for Windows/Mac OS is not implemented yet";
60 return false;
61 #endif
62 }

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有