如何製作 C++ RSS閱讀器?


Recommended Posts

先去找Socket傳輸範例

接著去挖HTML傳輸架構和檔頭格式

然後就是分析XML(這個好像有範例)

GUI的話去找範例應該也有

全部加起來應該就是你要的東西xd

搜尋時好像有 xml 的套件還啥的= =""

Socket 我只會做接收訊息和發出訊息的東西= =""

鏈接文章
分享到其他網站
搜尋時好像有 xml 的套件還啥的= =""

Socket 我只會做接收訊息和發出訊息的東西= =""

那就可以啦....

Socket打上伺服器加上80 Port

EX:http://nsysumis94.pixnet.net/blog/post/8782796

然後就是傳送以下資料

範例:(http://www.twvbb.com/vbb/external.php?type=rss2)

GET /vbb/external.php?type=rss2 HTTP/1.0\r\n

Accept text/html,application/xhtml+xml,application/xml\r\n

Accept-Language zh-tw,en-us;q=0.7,en;q=0.3\r\n

Accept-Charset Big5\r\n

Keep-Alive 300\r\n

Connection keep-alive\n\n

不過要注意Big5轉UTF-8的問題....(用API解決比較快xd)

鏈接文章
分享到其他網站
那就可以啦....

Socket打上伺服器加上80 Port

EX:http://nsysumis94.pixnet.net/blog/post/8782796

然後就是傳送以下資料

範例:(http://www.twvbb.com/vbb/external.php?type=rss2)

不過要注意Big5轉UTF-8的問題....(用API解決比較快xd)

我發現我之前學的 Socket 不能發 HTTP 請求

(好像是功能太簡單,不會收回傳:'()

然後版主給的範例打開後就關閉了T_T

--- 後來找到的範例(原本是黏一行,我自己編排+修改成請求本機的 Apache 來測試)

不過下面有個問題,目前只確定 400 Bad Request 時會有東西出現。

其他時候都沒有反應= =""


#include<winsock2.h>
#include<stdio.h>
#pragma comment(lib, "ws2_32.lib")

int main() {
WSADATA wsaData;
SOCKET connect_socket;
SOCKADDR_IN server_addr;
char recv_buf[10000];
char* send_buf = "GET /output.txt HTTP/1.0\r\n";

if (WSAStartup(MAKEWORD(2, 2), &wsaData)) { printf("WSAStartup failed with error\n");
return 0;
}

connect_socket = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0);
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(80);
server_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

if (SOCKET_ERROR == connect(connect_socket, (SOCKADDR*)&server_addr, sizeof(server_addr))) {
printf("Connect Error\n");
return 0;
}

int flag = send(connect_socket, send_buf, strlen(send_buf), 0);

if (flag == SOCKET_ERROR) {
printf("Send HTTP Fail\n");
} else {
printf("Send HTTP Successful\n");
}

recv(connect_socket, recv_buf, 4096, 0);
printf("%s\n", recv_buf);

closesocket(connect_socket);
WSACleanup();
system("pause");
}

--- 下午 6 點左右

我成功收到 200 OK 的東西了:$

不過 char 好像收不了太多訊息:'(

XML 還沒讀完就存不了:'(

這次我真的不會了(C++ 這方面問題我真的不懂= ="")

--- 大約7點左右

在 M$ 文件找到讀完方法,可是最後的好像多寫入一次= =""

而且還有部份文字亂碼問題:'(


#include<winsock2.h>
#include<stdio.h>
#include<string.h>
#pragma comment(lib, "ws2_32.lib")

int main() {
WSADATA wsaData;
SOCKET connect_socket;
SOCKADDR_IN server_addr;
char recv_buf[1024];
int Result;
char* send_buf = "GET /feed HTTP/1.1\nAccept-Charset: UTF-8\nHost:blog.frost.tw\n\n";
FILE *fout;
fout = fopen("output.txt", "w+t");


if (WSAStartup(MAKEWORD(2, 2), &wsaData)) { printf("WSAStartup failed with error\n");
return 0;
}

connect_socket = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0);
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(80);
server_addr.sin_addr.S_un.S_addr = inet_addr("67.220.217.187");

if (SOCKET_ERROR == connect(connect_socket, (SOCKADDR*)&server_addr, sizeof(server_addr))) {
printf("Connect Error\n");
return 0;
}

int flag = send(connect_socket, send_buf, strlen(send_buf), 0);

if (flag == SOCKET_ERROR) {
printf("Send HTTP Fail\n");
} else {
printf("Send HTTP Successful\n");
}
do{
Result = recv(connect_socket, recv_buf, 1024, 0);
if( Result > 0 )
fprintf(fout, "%s\n", recv_buf);
else if (Result == 0 )
printf("\nConnection Close\n");
else
printf("recv failed: %d\n", WSAGetLastError());
}while( Result > 0 );


closesocket(connect_socket);
WSACleanup();
system("pause");
}

--- 1/4 更新

大致上都處理完了(趴

不過還有一個問題:

Linux 和 Windows 傳輸資料好像有差異,不能收 Linux 資料(會有問題)

--- 1/9 更新

終於把亂碼問題處理完畢……

HTTP/1.1 和 HTTP/1.0 是元兇……

HTTP/1.0 讓一切正常運作了!

現在需要不需要引用任何 dll 就能分析XML的方法@@

(GUI似乎有 Dev C++ 的 Example 參考……)

--- 1/9 5:52

內容仍有部份為亂碼……

(求救- -)

此內容已被編輯, ,由 弦夜
增加訊息
鏈接文章
分享到其他網站

請登入後來留意見

在登入之後,您才能留意見



立即登入