很多人剛開始學(xué)做網(wǎng)站時,常把“網(wǎng)絡(luò)編程”和“web開發(fā)”混著用,覺得差不多。其實它們差得挺遠,就像蓋房子和裝潢的區(qū)別——一個管底層結(jié)構(gòu),一個管表面功能。
網(wǎng)絡(luò)編程是干嘛的?
網(wǎng)絡(luò)編程關(guān)注的是計算機之間怎么通信。比如你手機上的App要從服務(wù)器拿數(shù)據(jù),或者兩臺電腦傳文件,背后靠的是TCP、UDP這些協(xié)議。寫網(wǎng)絡(luò)編程的人,經(jīng)常要處理端口、套接字(socket)、數(shù)據(jù)包這些底層?xùn)|西。
舉個例子:你想做個聊天工具,兩個人能實時發(fā)消息,這時候就得用網(wǎng)絡(luò)編程。代碼可能長這樣:
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('localhost', 8080))
server.listen(1)
conn, addr = server.accept()
data = conn.recv(1024)
print('收到消息:', data.decode())
這段代碼在建立連接、收發(fā)原始數(shù)據(jù),不涉及網(wǎng)頁、按鈕或樣式,純粹是讓機器“說話”。
Web開發(fā)又是啥?
Web開發(fā)的重點是做網(wǎng)站或Web應(yīng)用,用戶能通過瀏覽器訪問。它分前端和后端。前端是你看到的頁面,用HTML、CSS、JavaScript搭建;后端是處理登錄、查數(shù)據(jù)庫、返回數(shù)據(jù)這些邏輯,常用Python、Node.js、PHP等語言。
比如你要做個博客網(wǎng)站,用戶點文章標(biāo)題就能看內(nèi)容。前端代碼可能是:
<div class="post">
<h2>我的第一篇博客</h2>
<p>今天學(xué)會了用Flask搭網(wǎng)站。</p>
</div>
而后端可能用Python Flask接收請求:
from flask import Flask
app = Flask(__name__)
@app.route('/post/1')
def show_post():
return '<h2>我的第一篇博客</h2>'
if __name__ == '__main__':
app.run()
你看,這里沒提socket、端口監(jiān)聽,重點是路由、響應(yīng)、頁面展示。
兩者關(guān)系:底層和上層的配合
Web開發(fā)其實是網(wǎng)絡(luò)編程的一個應(yīng)用場景。HTTP協(xié)議本身就是基于TCP的。當(dāng)你在瀏覽器輸入網(wǎng)址,背后先是網(wǎng)絡(luò)層建立連接,然后Web服務(wù)器才返回HTML頁面。
你可以理解為:網(wǎng)絡(luò)編程是修路,Web開發(fā)是在路上跑車。路不通,車走不了;光有路沒人跑車,路也沒意義。
學(xué)哪個更適合建站?
如果你目標(biāo)是做網(wǎng)站,比如企業(yè)官網(wǎng)、電商后臺、個人博客,那主攻Web開發(fā)就行。掌握HTML+CSS+JS,再學(xué)個后端框架如Django或Express,足夠應(yīng)付大多數(shù)項目。
但如果你想做即時通訊、遠程控制、物聯(lián)網(wǎng)設(shè)備通信這類需要自定義通信邏輯的系統(tǒng),那就得深入網(wǎng)絡(luò)編程。
現(xiàn)實中很多開發(fā)者是兩者都懂一點。比如調(diào)試接口連不上,知道用netstat查端口,這就是網(wǎng)絡(luò)編程的知識幫了Web開發(fā)的忙。