當前位置:首頁 » 網路連接 » 網路連接源碼
擴展閱讀
手機做身份證軟體 2025-09-26 05:51:12
對網路安全宣傳周的發言 2025-09-26 05:03:40

網路連接源碼

發布時間: 2022-10-20 13:34:52

『壹』 如何利用VBA來抓取給定鏈接的網頁源代碼

1、這個問題相對比較專業。建議再去知乎看看

2、另外咨詢下淘寶看看賣VBA程序的人都給出什麼方案

3、以下代碼轉載自網路:

方法1:利用AJAX

Dimhttp
Sethttp=CreateObject("Microsoft.XMLHTTP")
http.Open"POST","連接地址",False
http.send""
Ifhttp.Status=200Then
selection.text=http.responseText
EndIf、
二是開啟IE進程
Subtest()
Setie=CreateObject("InternetExplorer.Application")'設置變數
Withie'設置塊
.Navigate("需要打開的網頁的網址")'打開網頁
.Visible=True'是否顯示ie窗口
While.readystate<>4'延遲等待頁面載入完畢
DoEvents
Wend
Fori=22To49Step3'取數循環
S=S&""&.Document.all.tags("td")(i).innerTEXT'取數據到變數,熟悉HTML的DOM可以修改這個實現各種內容
Nexti
EndWith'塊結束
S=LTrim(S)'刪除左邊空格
Application.SendKeys"^{F4}"'發送按鍵關閉當前瀏覽器標簽
MsgBoxS'顯示結果
Setie=Nothing'釋放內存
EndSub

『貳』 網頁源代碼怎麼使用

網站源碼下載下來後。你新建一個TXT文本文檔然後把代碼復制進去,再改下後綴名改為html。也就是網頁的打開方式,這樣你打開他就成為了網頁了。但是需要注意的是網頁內部代碼的圖片是地址的,也就是說你打開網頁時,代碼里的圖片是在原來的網站里下載下來的,如果你斷開網路連接打開那個網頁就會發現圖片不見了。 打開網路圖片就會回來。 我學的網頁製作用的是用的dreamweaver,並且以fireworks,flash輔助,者就是網頁製作作俗稱的三劍客 dreamweaver是布局表格的也就是做網頁,fireworks是文字處理的跟photoshop很像,flash是製作簡單動畫的。個人認為這都是初級的網頁製作軟體。。

『叄』 delphi程序中加入運行程序前檢測網路連接的源碼

uses WinInet;

// 判斷是否連網
function ISInternetConnected():Boolean;
const
MODEM = 1;
LAN = 2;
PROXY = 4;
MODEM_BUSY = 8;
var
dwConnectionTypes:DWORD;
begin
dwConnectionTypes:= MODEM + LAN + PROXY;
Result:=InternetGetConnectedState(@dwConnectionTypes,0);
end;

『肆』 是能幫我搞一個寬頻連接的易語言源碼

.下面是寬頻連接的代碼。如果不清楚,把郵箱寫上我發送給你。

版本 2
.支持庫 dp1
.支持庫 internet
.支持庫 eAPI
.程序集 窗口程序集1
.子程序 __啟動窗口_創建完畢

.判斷開始 (文件是否存在 (取運行目錄 () + 「/帳號.ini」))
編輯框2.內容 = 到文本 (讀入文件 (取運行目錄 () + 「/密碼.ini」))
編輯框2.內容 = 到文本 (解密數據 (到位元組集 (編輯框2.內容), 「52cenziyu」, 2))
編輯框1.內容 = 到文本 (讀入文件 (取運行目錄 () + 「/帳號.ini」))
編輯框1.內容 = 到文本 (解密數據 (到位元組集 (編輯框1.內容), 「52cenziyu」, 2))
.默認
返回 ()
.判斷結束

.子程序 _按鈕2_被單擊
銷毀 ()
.子程序 _按鈕1_被單擊
撥號 (「@0」, 編輯框1.內容, 編輯框2.內容, , )
標題 = 「正在連接中」
延時 (3000)
.判斷開始 (是否與互聯網連接 ())
' 信息框 (「連接成功」, 0, )
' 信息框 (「您的計算機已經成功連接到了互聯網」, 0, )
寫到文件 (取運行目錄 () + 「/帳號.ini」, 到位元組集 (加密數據 (到位元組集 (編輯框1.內容), 「52cenziyu」, 2)))
寫到文件 (取運行目錄 () + 「/密碼.ini」, 到位元組集 (加密數據 (到位元組集 (編輯框2.內容), 「52cenziyu」, 2)))
' 信息框 (「您的IP為:」 + 取IP地址 (), 0, )
銷毀 ()
.默認
信息框 (「連接失敗,請檢查帳號密碼是否正確」, 0, )
返回 ()
.判斷結束

.子程序 _按鈕3_被單擊
掛斷 ()

『伍』 易語言斷開本地網路連接源碼!

如果是撥號網路連接的話,就只需要一個代碼:
掛斷 ()
一旦不需要撥號網路連接的話,就可以使用本命令斷開。
----------------------------------------------------------
如果不是的話代碼如下:

.版本 2
.子程序 _將所有網路連接掛斷_被單擊
.局部變數 枚舉連接, 文本型, , "0"
.局部變數 i, 整數型
.計次循環首 (枚舉所有網路連接__已連接的 (枚舉連接), i)
設置本地連接 (枚舉連接 [i], 假)
.計次循環尾 ()
返回 (假)
.子程序 枚舉所有網路連接_已連接的, 整數型, 公開
.參數 網路連接名, 文本型, 參考 可空 數組
.局部變數 size, 整數型
.局部變數 AdapterInfo, IP_ADAPTER_INFO
.局部變數 buf, 位元組集
.局部變數 addr, 整數型
.局部變數 i, 整數型
.局部變數 mac, 文本型
.局部變數 tmp, 文本型
.局部變數 Addr_ip, 整數型
.局部變數 buf_ip, IP_ADDR_STRING
.局部變數 size_dns, 整數型
.局部變數 buf_dns, 位元組集
.局部變數 dns, IP_PER_ADAPTER_INFO
.局部變數 addr_dns, 整數型
清除數組 (網路連接名)
GetAdaptersInfo ({ 0 }, size)
buf = 取空白位元組集 (size)
addr = 取變數地址_位元組集 (buf, buf, 0)
.如果真 (GetAdaptersInfo (buf, size) = 0)
.循環判斷首 ()
CopyMemory_iai (AdapterInfo, addr, 640)
加入成員 (網路連接名, 取文本注冊項 (4, 「SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\」 + 到文本 (AdapterInfo.AdapterName) + 「\Connection\Name」, ))
addr = AdapterInfo.Next
.循環判斷尾 (addr ≠ 0)
.如果真結束
返回 (取數組成員數 (網路連接名))
.版本 2
.DLL命令 GetAdaptersInfo, 整數型, "IPHlpApi"
.參數 IpAdapterInfo, 位元組集
.參數 pOutBufLen, 整數型, 傳址
.DLL命令 GetPerAdapterInfo, 整數型, "IPHlpApi"
.參數 IfIndex, 整數型
.參數 pPerAdapterInfo, 位元組集
.參數 pOutBufLen, 整數型, 傳址
.DLL命令 Len_iai, 整數型, "kernel32", "LocalSize"
.參數 hMem, IP_ADAPTER_INFO, 傳址
.DLL命令 len_ipai, 整數型, , "LocalSize"
.參數 hMem, IP_PER_ADAPTER_INFO, 傳址
.DLL命令 Len_ias, 整數型, "kernel32", "LocalSize"
.參數 hMem, IP_ADDR_STRING, 傳址
.DLL命令 取變數地址_位元組集, 整數型, , "lstrcpynA"
.參數 變數, 位元組集, 傳址
.參數 變數, 位元組集, 傳址
.參數 保留, 整數型, , 0
.DLL命令 CopyMemory_iai, , "kernel32", "RtlMoveMemory"
.參數 Destination, IP_ADAPTER_INFO, 傳址
.參數 Source, 整數型
.參數 Length, 整數型
.DLL命令 CopyMemory_ipai, , "kernel32", "RtlMoveMemory"
.參數 Destination, IP_PER_ADAPTER_INFO, 傳址
.參數 Source, 整數型
.參數 Length, 整數型
.DLL命令 CopyMemory_ias, , "kernel32", "RtlMoveMemory"
.參數 Destination, IP_ADDR_STRING, 傳址
.參數 Source, IP_ADDR_STRING
.參數 Length, 整數型

.版本 2
.數據類型 IP_ADAPTER_INFO
.成員 Next, 整數型
.成員 ComboIndex, 整數型
.成員 AdapterName, 位元組型, , "260", 名稱
.成員 Description, 位元組型, , "132", 描述
.成員 AddressLength, 整數型
.成員 Address, 位元組型, , "8"
.成員 Index, 整數型
.成員 Type, 整數型, , , 類型
.成員 DhcpEnabled, 整數型
.成員 CurrentIpAddress, 整數型
.成員 IpAddressList, IP_ADDR_STRING
.成員 GatewayList, IP_ADDR_STRING
.成員 DhcpServer, IP_ADDR_STRING
.成員 HaveWins, 邏輯型
.成員 PrimaryWinsServer, IP_ADDR_STRING
.成員 SecondaryWinsServer, IP_ADDR_STRING
.成員 LeaseObtained, 整數型
.成員 LeaseExpires, 整數型
.數據類型 IP_ADDR_STRING
.成員 Next, 整數型
.成員 IpAddress, 位元組型, , "16", IP_ADDRESS_STRING
.成員 IpMask, 位元組型, , "16", IP_MASK_STRING=IP_ADDRESS_STRING
.成員 Context, 整數型
.數據類型 IP_PER_ADAPTER_INFO
.成員 tmp, 整數型, , "3"
.成員 CurrentDnsServer, IP_ADDR_STRING
.成員 DnsServerList, IP_ADDR_STRING

『陸』 如何開發自己的HttpServer-NanoHttpd源碼解讀

1.能接受HttpRequest並返回HttpResponse
2.滿足一個Server的基本特徵,能夠長時間運行

關於Http協議一般HttpServer都會聲明支持Http協議的哪些特性,nanohttpd作為一個輕量級的httpserver只實現了最簡單、最常用的功能,不過我們依然可以從中學習很多。

首先看下NanoHttpd類的start函數

[java] view plain
public void start() throws IOException {
myServerSocket = new ServerSocket();
myServerSocket.bind((hostname != null) ? new InetSocketAddress(hostname, myPort) : new InetSocketAddress(myPort));

myThread = new Thread(new Runnable() {
@Override
public void run() {
do {
try {
final Socket finalAccept = myServerSocket.accept();
registerConnection(finalAccept);
finalAccept.setSoTimeout(SOCKET_READ_TIMEOUT);
final InputStream inputStream = finalAccept.getInputStream();
asyncRunner.exec(new Runnable() {
@Override
public void run() {
OutputStream outputStream = null;
try {
outputStream = finalAccept.getOutputStream();
TempFileManager tempFileManager = tempFileManagerFactory.create();
HTTPSession session = new HTTPSession(tempFileManager, inputStream, outputStream, finalAccept.getInetAddress());
while (!finalAccept.isClosed()) {
session.execute();
}
} catch (Exception e) {
// When the socket is closed by the client, we throw our own SocketException
// to break the "keep alive" loop above.
if (!(e instanceof SocketException && "NanoHttpd Shutdown".equals(e.getMessage()))) {
e.printStackTrace();
}
} finally {
safeClose(outputStream);
safeClose(inputStream);
safeClose(finalAccept);
unRegisterConnection(finalAccept);
}
}
});
} catch (IOException e) {
}
} while (!myServerSocket.isClosed());
}
});
myThread.setDaemon(true);
myThread.setName("NanoHttpd Main Listener");
myThread.start();
}
1.創建ServerSocket,bind制定埠

2.創建主線程,主線程負責和client建立連接
3.建立連接後會生成一個runnable對象放入asyncRunner中,asyncRunner.exec會創建一個線程來處理新生成的連接。
4.新線程首先創建了一個HttpSession,然後while(true)的執行httpSession.exec。
這里介紹下HttpSession的概念,HttpSession是java里Session概念的實現,簡單來說一個Session就是一次httpClient->httpServer的連接,當連接close後session就結束了,如果沒結束則session會一直存在。這點從這里的代碼也能看到:如果socket不close或者exec沒有拋出異常(異常有可能是client段斷開連接)session會一直執行exec方法。
一個HttpSession中存儲了一次網路連接中server應該保存的信息,比如:URI,METHOD,PARAMS,HEADERS,COOKIES等。
5.這里accept一個client的socket就創建一個獨立線程的server模型是ThreadServer模型,特點是一個connection就會創建一個thread,是比較簡單、常見的socket server實現。缺點是在同時處理大量連接時線程切換需要消耗大量的資源,如果有興趣可以了解更加高效的NIO實現方式。

當獲得client的socket後自然要開始處理client發送的httprequest。

Http Request Header的parse:

[plain] view plain
// Read the first 8192 bytes.
// The full header should fit in here.
// Apache's default header limit is 8KB.
// Do NOT assume that a single read will get the entire header at once!
byte[] buf = new byte[BUFSIZE];
splitbyte = 0;
rlen = 0;
{
int read = -1;
try {
read = inputStream.read(buf, 0, BUFSIZE);
} catch (Exception e) {
safeClose(inputStream);
safeClose(outputStream);
throw new SocketException("NanoHttpd Shutdown");
}
if (read == -1) {
// socket was been closed
safeClose(inputStream);
safeClose(outputStream);
throw new SocketException("NanoHttpd Shutdown");
}
while (read > 0) {
rlen += read;
splitbyte = findHeaderEnd(buf, rlen);
if (splitbyte > 0)
break;
read = inputStream.read(buf, rlen, BUFSIZE - rlen);
}
}
1.讀取socket數據流的前8192個位元組,因為http協議中頭部最長為8192

2.通過findHeaderEnd函數找到header數據的截止位置,並把位置保存到splitbyte內。

[java] view plain
if (splitbyte < rlen) {
inputStream.unread(buf, splitbyte, rlen - splitbyte);
}

parms = new HashMap<String, String>();
if(null == headers) {
headers = new HashMap<String, String>();

}
1.http協議規定header和body之間使用兩個回車換行分割

1.Http協議第一行是Method URI HTTP_VERSION

2.後面每行都是KEY:VALUE格式的header
3.uri需要經過URIDecode處理後才能使用
4.uri中如果包含?則表示有param,httprequest的param一般表現為:/index.jsp?username=xiaoming&id=2

下面是處理cookie,不過這里cookie的實現較為簡單,所以跳過。之後是serve方法,serve方法提供了用戶自己實現httpserver具體邏輯的很好介面。在NanoHttpd中的serve方法實現了一個默認的簡單處理功能。

[java] view plain

發送response的步驟如下:

1.設置mimeType和Time等內容。
2.創建一個PrintWriter,按照HTTP協議依次開始寫入內容
3.第一行是HTTP的返回碼
4.然後是content-Type
5.然後是Date時間
6.之後是其他的HTTP Header
7.設置Keep-Alive的Header,Keep-Alive是Http1.1的新特性,作用是讓客戶端和伺服器端之間保持一個長鏈接。
8.如果客戶端指定了ChunkedEncoding則分塊發送response,Chunked Encoding是Http1.1的又一新特性。一般在response的body比較大的時候使用,server端會首先發送response的HEADER,然後分塊發送response的body,每個分塊都由chunk length\r\n和chunk data\r\n組成,最後由一個0\r\n結束。

9.如果沒指定ChunkedEncoding則需要指定Content-Length來讓客戶端指定response的body的size,然後再一直寫body直到寫完為止。