首页
/
每日頭條
/
情感
/
tcp消息
tcp消息
更新时间:2024-11-20 01:36:01

大一的時候,我開始搗鼓用C語言做網絡編程,你們知道的,就是socket、bind、listen、accpet、recv、send那一套玩意兒。

我捧着一本從圖書館借來的書,按照上面的提示,一行一行的照着敲到了電腦裡,成功的寫出了一個TCP的服務端和客戶端,可以用來收發消息。

不過客戶端和控制端都在我自己電腦上運行,自己給自己發消息,沒意思。于是我把客戶端發給了室友,和他可以實現跨電腦通信了。

于是就在那黑乎乎的控制台窗口上,我們聊起來了,雖然他就在我對面,雖然隻是文字信息,雖然如此簡陋,室友還是誇我厲害,讓我充滿了成就感,原來網絡編程這麼有意思。

成功運行以後,和室友們挑燈組隊玩了幾把穿越火線,高興~

tcp消息(給女朋友寫了個TCP聊天程序)1

第二天,我開始琢磨着,把客戶端發給我遠在2公裡以外的女朋友,這樣晚上的時候,我們在各自的宿舍就用它代替QQ來聊天,想想還挺浪漫哈~

tcp消息(給女朋友寫了個TCP聊天程序)2

沒想到當即就被鄙視了,就這黑乎乎的玩意?就不能做個漂亮的界面嗎?

是啊,就這玩意确實不好見人,至少得像QQ一樣,有個聊天界面,有個發送按鈕,要是還能發送圖片就更好了。

于是我又折騰了一個星期,用VC 弄了個簡單的界面出來,還從網上搞了一個漂亮的皮膚加上,這下漂亮多了。

我興奮的把程序發給女朋友,期待她投來崇拜的目光。

然鵝···

她居然在QQ上告訴我:彈了個窗口,提示連不上服務器!

tcp消息(給女朋友寫了個TCP聊天程序)3

我服務端開着的啊?可就是死活連不上。

我迅速冷靜下來,老師教過,可以用ping命令看看網絡通不通。

我用QQ遠程操作桌面過去,在她的電腦上ping我的電腦:

ping 192.168.1.103

哇靠!居然ping不通!

我弱弱的請教了有經驗的師兄,然後又被鄙視了:你這能ping通就怪了,這是局域網地址啊!

我一臉懵逼,啥叫局域網地址?為什麼就ping不通?

tcp消息(給女朋友寫了個TCP聊天程序)4

那時的我,剛剛學了C語言,計算機網絡課程才剛剛接觸,用小白來形容完全不為過。

于是我開始瘋狂充電,這才知道了什麼叫公網地址,什麼叫私有地址,知道了宿舍裡的那個路由器,有一個叫NAT的功能,會将我們電腦上網的局域網私有地址偷偷改成公網地址,一出了宿舍,就是用公網地址在進行通信了。

NAT的出現緩解了IP地址不夠用的問題,可以讓宿舍裡我們幾個人共用同一個IP地址上網。

現在看來很簡單的技術,但那時候不知道就是不知道啊,因此鬧了笑話。

于是我在路由器上找到了WLAN口的公網IP地址,替換了客戶端代碼中的服務端地址,重新編譯了一個包發給女朋友。

這下總該可以了吧?

然鵝,還是不行!

估計各位看到這裡,心裡也在說那句話:這樣要是能行就怪了!

是的,雖然改成了公網地址,但還沒有配置路由器做轉發啊。

又折騰了半天,才學到了一個叫UPnP的東西,得去路由器上配置端口轉發,将公網IP下的端口号,映射到局域網下某個地址的某個端口,這樣擁有公網IP地址的路由器收到連接後才會轉發到我電腦上的服務端上。

我登錄到路由器後台,把我的服務端監聽的端口号做了映射配置,迫不及待的讓女朋友再試一次!

終于,這一次她告訴我:連上了!

終于,我給她發了第一條消息:Hello,World!

心情大好,中午加個葷菜~

tcp消息(給女朋友寫了個TCP聊天程序)5

用IP地址來建立連接終究不是好辦法,因為路由器上的公網IP經常變來變去,每次變了都得要重新編譯一個客戶端,可麻煩了。

要不然就每次手動輸入,但我總不能留個輸入框讓女朋友每次都填寫IP地址吧,她一定會質問我:為什麼我登錄QQ,人家沒讓我填QQ的IP地址啊?

tcp消息(給女朋友寫了個TCP聊天程序)6

于是我又一陣搜索,了解到了可以域名代替IP的方式來解決這個問題。

程序代碼中用域名替換IP,然後動态解析成IP地址,服務端的IP地址再也不用寫死到代碼中了。

但接着問題來了,為了這麼個破玩意兒還要去注冊個域名?注冊域名不得還要錢嗎?

公網IP經常變,是不是每次變了都得去更改這個域名映射的IP,這也還是麻煩啊!

又雙叒經過一陣研究,又了解到了一個叫DDNS動态域名解析的玩意兒,一個叫花生殼的軟件,下載一個客戶端,把我的幾個問題都安排的明明白白。

tcp消息(給女朋友寫了個TCP聊天程序)7

自己不用注冊域名,用這個花生殼下面的子域名就行,有了客戶端,随時可以更改域名映射的IP地址,方便快捷。

再一次更改了我的程序,總算把這個問題解決了。

不過新的問題很快又來了,我這個程序隻能服務端和客戶端雙方通信,要是有第三個人、第四個人要加入,這咋整呢?

繼續改!

tcp消息(給女朋友寫了個TCP聊天程序)8

說回到今天寫這篇文章的主題上來。

經常有人在微信上問我:軒轅,xxx該怎麼學啊?我是小白,還有機會嗎?

其實吧,誰不是從小白走過來的,誰在學習的路上又沒被鄙視過,沒鬧過笑話呢?所謂聞道有先後,術業有專攻,如是而已。

從我自己學習的經曆總結來看,想要技術學的紮實,光看課程和書籍是遠遠不夠的,得動手!

去真正動手做一些項目,遇到實際的問題時,你才知道那些各種各樣的技術是什麼意思,又是為解決什麼問題而出現的,這比從書本上或博客裡看來的要理解深刻得多。

工作幾年下來發現,基礎知識積累最多最快的還是上大學那幾年。工作以後,像操作系統、計算機網絡、數據結構與算法這些基礎課程知識,日常工作中其實真正打交道的機會并不多,更多時間都是寫寫API接口,做下CRUD,堆一堆框架代碼積木,或者學習redis、mysql、rabbitmq、elasticsearch等第三方組件的使用。

在大學期間,我大緻做過以下幾個項目:

- 即時通訊軟件

- 靜态Web服務器

- 遠程桌面控制軟件

- 網絡流量還原軟件

- Windows内核ARK工具

雖然現在看來每一個做的都挺糙的,離實用還有不少距離,但基本功能是完成了,而且通過開發這些東西,不僅對當時的我編程能力有了不少的提升,而且在這個過程中,不斷發現新的技術名詞,打牢了基礎,還學到了不少課本上沒有的東西。

如果你是剛剛入行的新手,我的建議是,不僅要看書,更要多動手,Talk is cheap, show me the code

作者:軒轅之風

來源:編程技術宇宙(ID:xuanyuancoding)

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
Copyright 2023-2024 - www.tftnews.com All Rights Reserved