Linux下的TCP編程

學習tcp和udp之前要牢記的基礎通信模型

TCP

按照通信模型編程序的話不會出現大的邏輯錯誤。

TCP編程

對於服務器:創建自己的套接字(我的理解:套接字相當於一個文件返回一個INT型的文件描述符)然後是初始化本機的地址結構體。然後是使用bind()綁定套接字和地址結構體;對於TCP需使用lisent()設置服務器最大連接數(int);使用accept()阻塞程序直到有客戶端請求連接。連接連接成功後即可使用write和read或者send和recv與客戶端進行通信交流。

對於客戶端:創建自己的套接字後直接初始化目標機結構體,然後使用connet()參數包括本機socket描述符和目標機地址結構。返回0,代表連接成功,即可使用write和read或者send和recv與服務器進行通信交流。

注意:1.雖然addr_server.sin_addr.s_addr = htonl(INADDR_ANY);經常被使用。INADDR_ANY代表任何IP地址,但是在服務器端本結構體確實是代表本機IP。在這裏INADDR_ANY可以理解爲服務器可接受本網任何IP的連接。

           2.注意accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)和connect(SOCKET s, const struct sockaddr * name, int namelen)兩個函數的第二個參數一定是struct sockaddr 的指針。一般是定義一個struct sockaddr addr_server然後傳參時用(struct sockaddr *)(&addr_server),如果直接定義struct sockaddr *addr傳參用addr會出錯。(還沒搞懂爲啥)

          3.想在客戶端連接指定ip的話最好用inet_aton("172.18.71.63",&server_addr.sin_addr)的形式初始化地址結構。不要先轉換再強制類型轉化初始化。一不小心就會出錯。

明天更UDP

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章