乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      5分鐘!教你用C語(yǔ)言發(fā)送郵件:附送源碼+教學(xué)!

       靜幻堂 2018-09-03

      前言

      相信大家都有過(guò)被C語(yǔ)言網(wǎng)絡(luò)編程所支配的恐懼吧?其實(shí),小編在剛剛學(xué)習(xí)這方面的知識(shí)的時(shí)候也有這樣的感受,并且所有的資料都是從網(wǎng)絡(luò)尋找的,但是,現(xiàn)在你們不同了,因?yàn)檫@篇文章將會(huì)帶你們一步步地,寫(xiě)出你們第一個(gè)使用SMTP協(xié)議來(lái)發(fā)送郵件的C語(yǔ)言程序,這個(gè)和小編剛學(xué)習(xí)的時(shí)候可不同呀!

      文章末尾有總結(jié),這是精髓哦

      5分鐘!教你用C語(yǔ)言發(fā)送郵件:附送源碼+教學(xué)!

      言歸正傳,代碼寫(xiě)起來(lái)!

      首先,這篇文章不是講理論的文章,而是讓你們動(dòng)手實(shí)踐的文章,目的在于讓各位看官能動(dòng)手寫(xiě)出能編譯成功、能成功運(yùn)行、能成功發(fā)送郵件C語(yǔ)言程序,這篇文章不會(huì)涉及太多的理論知識(shí),并且代碼也沒(méi)有經(jīng)過(guò)特別的封裝,旨在讓各位看官能編寫(xiě)出這個(gè)程序,所以看官跟著文章動(dòng)手做就可以了。

      第一步

      首先,引用stdio.h、winsock2.h、windows.h可有可無(wú),下文講到),注意,這里有一個(gè)地方有很多人會(huì)出錯(cuò),如果你要引用windows.h的話,就得在引用winsock2.h之后才能引用windows.h,否則會(huì)出現(xiàn)“未定義標(biāo)識(shí)符”的情況,如下圖↓

      5分鐘!教你用C語(yǔ)言發(fā)送郵件:附送源碼+教學(xué)!

      這是正確寫(xiě)法

      5分鐘!教你用C語(yǔ)言發(fā)送郵件:附送源碼+教學(xué)!

      錯(cuò)誤寫(xiě)法

      按照錯(cuò)誤寫(xiě)法進(jìn)行調(diào)試的話,會(huì)出現(xiàn)以下錯(cuò)誤提示↓

      5分鐘!教你用C語(yǔ)言發(fā)送郵件:附送源碼+教學(xué)!

      錯(cuò)誤提示

      然后我們?cè)俾暶?strong>一個(gè)變量和兩個(gè)函數(shù),變量是用來(lái)儲(chǔ)存服務(wù)器返回的數(shù)據(jù)的,兩個(gè)函數(shù)分別是用來(lái)創(chuàng)建套接字(socket)接收服務(wù)器返回?cái)?shù)據(jù)的,這里我們聲明了一個(gè)字符型數(shù)組,數(shù)組大小我們用BUFSIZ代替,這里有人就會(huì)問(wèn)了:“為什么用BUFSIZ作為數(shù)組大小呢?”,答案是:“減輕系統(tǒng)負(fù)擔(dān)”,不理解?沒(méi)關(guān)系,先把代碼運(yùn)行起來(lái),然后再慢慢研究。

      除了以上步驟,我們還需要寫(xiě)入以下兩行代碼,加入兩個(gè)庫(kù)文件,其中User32.lib是可有可無(wú)的,加入User32.lib只是為了能夠調(diào)用MessageBox()函數(shù)而已。

      5分鐘!教你用C語(yǔ)言發(fā)送郵件:附送源碼+教學(xué)!

      到這里,我們的第一步完成了!接下來(lái)是第二步

      第二步

      初始化

      前期的準(zhǔn)備工作做好了,我們現(xiàn)在開(kāi)始編寫(xiě)我們要用到的函數(shù)——socket_connect_server(void),從字面的意思上來(lái)看,大家都應(yīng)該明白這個(gè)函數(shù)是干嘛的吧?沒(méi)錯(cuò),它是用來(lái)創(chuàng)建套接字并連接SMTP服務(wù)器的。

      我們要?jiǎng)?chuàng)建一個(gè)套接字,初始化完成后,我們要把它記在某個(gè)地方,要不然“忘記”了怎么辦?所以我們要聲明一個(gè)變量來(lái)存放套接字初始化后的數(shù)據(jù)——WSADATA wd,wd就是用來(lái)存放這些數(shù)據(jù)的變量。

      好了,我們用到的主要變量已經(jīng)聲明完畢,接下來(lái)要初始化,我們要向編譯器說(shuō)明,我們要用到Ws2_32.libWinsock2.h中的哪個(gè)庫(kù)文件(簡(jiǎn)單來(lái)說(shuō)就是初始化而已),如圖,代碼可以這么寫(xiě)↓

      5分鐘!教你用C語(yǔ)言發(fā)送郵件:附送源碼+教學(xué)!

      創(chuàng)建套接字

      開(kāi)始創(chuàng)建socket,這里我們要用到socket()函數(shù),socket()需要三個(gè)參數(shù),但是一般情況下,按照?qǐng)D中的代碼寫(xiě)也是可以的,所以,這行代碼各位看官照抄就行了!其實(shí),這三個(gè)參數(shù)很容易理解,這里就不“搬書(shū)”了。

      5分鐘!教你用C語(yǔ)言發(fā)送郵件:附送源碼+教學(xué)!

      輸入服務(wù)器信息

      這里解釋一下inet_addr()函數(shù),它的功能是將一個(gè)點(diǎn)分十進(jìn)制的IP轉(zhuǎn)換成一個(gè)長(zhǎng)整數(shù)型數(shù)(u_long類(lèi)型),說(shuō)白了,就是數(shù)據(jù)類(lèi)型轉(zhuǎn)換,將IP地址的數(shù)據(jù)類(lèi)型成能夠存到addr這個(gè)結(jié)構(gòu)體的數(shù)據(jù)類(lèi)型。

      還有一個(gè)htons()函數(shù),它的作用是將括號(hào)里面的數(shù)值,轉(zhuǎn)化成網(wǎng)絡(luò)字節(jié)順序(TCP/IP中規(guī)定數(shù)據(jù)表現(xiàn)形式),簡(jiǎn)單點(diǎn)講,就是將括號(hào)里面的數(shù)值轉(zhuǎn)化成另一種表現(xiàn)形式。

      5分鐘!教你用C語(yǔ)言發(fā)送郵件:附送源碼+教學(xué)!

      連接服務(wù)器

      套接字有了,服務(wù)器也有了,接下來(lái)要干嘛呢?那就是連接服務(wù)器!連接服務(wù)器我們要用到connet()函數(shù)而不是bind()函數(shù),這里簡(jiǎn)單的記一下“connet()用在客戶(hù)端,bind()用在服務(wù)器”。

      5分鐘!教你用C語(yǔ)言發(fā)送郵件:附送源碼+教學(xué)!

      這里跟大家說(shuō)一下,connet()函數(shù)其中第一個(gè)參數(shù)是SOCKADDR類(lèi)型,而我們這里為什么用SOCKADDR_IN類(lèi)型呢?請(qǐng)看下圖↓

      5分鐘!教你用C語(yǔ)言發(fā)送郵件:附送源碼+教學(xué)!

      SOCKADDR_IN強(qiáng)制轉(zhuǎn)換成SOCKADDR類(lèi)型

      圖中的代碼將smtp郵箱IP地址存放在SOCKADDR_INS_addr成員中,然后再將端口號(hào)放在sin_port成員中,分開(kāi)進(jìn)行,而SOCKADDR就不一樣了,它將IP地址和端口號(hào)一起放在sa_data[14]這個(gè)成員中,這樣看來(lái)SOCKADDR是一種通用的套接字地址,SOCKADDR_IN是internet環(huán)境下套接字的地址形式。說(shuō)白了,就是“SOCKADDR_IN更適合用于網(wǎng)絡(luò)編程”,記住這句話就對(duì)了!

      第三步

      就是我們的recv_show()函數(shù),這個(gè)函數(shù)比較簡(jiǎn)單,這里就不多說(shuō)了,照抄!

      5分鐘!教你用C語(yǔ)言發(fā)送郵件:附送源碼+教學(xué)!

      服務(wù)器已經(jīng)連接了、接收數(shù)據(jù)并打印的函數(shù)也有了,接下來(lái)就是按照SMTP協(xié)議發(fā)送數(shù)據(jù)

      這里會(huì)用到send()函數(shù),它有三個(gè)參數(shù),分別是已連接的socket、發(fā)送的字符串、發(fā)送字符串長(zhǎng)度調(diào)用執(zhí)行方式(一般為0)。

      代碼書(shū)寫(xiě)示例:send(socket_use,"發(fā)送的數(shù)據(jù) ",strlen("發(fā)送的數(shù)據(jù) "),0),為什么后面會(huì)有 ?這個(gè)跟SMTP協(xié)議有關(guān), CMD命令行發(fā)送郵件時(shí)的“回車(chē)”效果一樣。

      注意:

      • 發(fā)送的賬號(hào)、密碼要通過(guò)base64加密,不會(huì)如何加密?那么,請(qǐng)百度搜索:“base64
      • 發(fā)送和接收的郵箱要開(kāi)啟smtp服務(wù)!
      • 發(fā)件人和收件人可以是同一個(gè)郵箱
      • 發(fā)送郵件的最后三行語(yǔ)句特別重要,注意格式(文章末尾有)

      接下來(lái)就是按照SMTP協(xié)議來(lái)發(fā)送數(shù)據(jù)和接收數(shù)據(jù)了

      如圖,參照CMD命令通過(guò)SMTP協(xié)議發(fā)送郵件的實(shí)例,來(lái)寫(xiě)C語(yǔ)言發(fā)送郵件的代碼↓

      5分鐘!教你用C語(yǔ)言發(fā)送郵件:附送源碼+教學(xué)!

      CMD發(fā)送郵件的過(guò)程

      舉個(gè)例子,我們第一步要發(fā)送“helo 163.com”,那么,我們用C語(yǔ)言發(fā)送是這樣的,send(socket_use,"helo 163.com ",strlen("helo 163.com "),0),按照這行代碼,以此類(lèi)推寫(xiě)下去,然后再用recv_show()輸出服務(wù)器應(yīng)答的信息。

      5分鐘!教你用C語(yǔ)言發(fā)送郵件:附送源碼+教學(xué)!

      5分鐘!教你用C語(yǔ)言發(fā)送郵件:附送源碼+教學(xué)!

      注意這三行C語(yǔ)言代碼,跟CMD發(fā)郵件過(guò)程對(duì)比以下↓

      5分鐘!教你用C語(yǔ)言發(fā)送郵件:附送源碼+教學(xué)!

      最后

      這是程序運(yùn)行之后的結(jié)果

      5分鐘!教你用C語(yǔ)言發(fā)送郵件:附送源碼+教學(xué)!

      以下是全部代碼↓

      5分鐘!教你用C語(yǔ)言發(fā)送郵件:附送源碼+教學(xué)!

      5分鐘!教你用C語(yǔ)言發(fā)送郵件:附送源碼+教學(xué)!

      5分鐘!教你用C語(yǔ)言發(fā)送郵件:附送源碼+教學(xué)!

      5分鐘!教你用C語(yǔ)言發(fā)送郵件:附送源碼+教學(xué)!

      5分鐘!教你用C語(yǔ)言發(fā)送郵件:附送源碼+教學(xué)!

      5分鐘!教你用C語(yǔ)言發(fā)送郵件:附送源碼+教學(xué)!

      5分鐘!教你用C語(yǔ)言發(fā)送郵件:附送源碼+教學(xué)!

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶(hù) 評(píng)論公約

        類(lèi)似文章 更多