根據下面的步驟編寫TCP Socket小程序。注意:做者必須是本身的名字。結果以下: 編程
步驟: 一、用VC創建服務器程序小程序
建立一個win32控制檯程序服務器
上面的代碼以下,編寫代碼的時候切換到FileView界面,其中StdAfx.cpp文件不用編輯,直接點擊「編譯」-->「連接「圖標就能夠了:網絡
注意必需要先編譯、連接這個文件,不然後面會報錯。socket
咱們須要在TServer.cpp代碼裏面進行編輯tcp
TServer.cpp代碼以下:函數
服務器端運行效果,記得設置防火牆容許訪問:spa
2、編寫客戶端,重開另一個VC++6.0程序(不要在同一個VC++6.0程序裏面新建兩個工程),新建TClient工程(沒截圖,全部用舊圖,把下面的工程名稱TServer改爲TClient)視頻
勾選一個簡單的應用程序blog
編寫客戶端的代碼,以下:
注:上面一行的 return 0;緊接着的是大括號}。以下:
return 0;
}
運行效果(必須先開啓服務器端):
一、先開啓服務器端;
二、開啓客戶端。
最後看代碼得知TCP編程步驟:
TCP編程的服務器端通常步驟是:
一、建立一個socket,用函數socket();
二、設置socket屬性,用函數setsockopt(); * 可選步驟
三、綁定IP地址、端口等信息到socket上,用函數bind();
四、開啓監聽,用函數listen();
五、接收客戶端上來的鏈接,用函數accept();
六、收發數據,用函數send()和recv(),或者read()和write();
七、關閉網絡鏈接;
八、關閉監聽;
TCP編程的客戶端通常步驟是:
一、建立一個socket,用函數socket();
二、設置socket屬性,用函數setsockopt();* 可選 步驟
三、綁定IP地址、端口等信息到socket上,用函數bind();* 可選 步驟
四、設置要鏈接的對方的IP地址和端口等屬性;
五、鏈接服務器,用函數connect();
六、收發數據,用函數send()和recv(),或者read()和write();
七、關閉網絡鏈接;
上面的函數send()和recv(),或者read()和write()的區別是:
一旦,咱們創建好了tcp鏈接以後,咱們就能夠把獲得的fd看成文件描述符來使用。
由此網絡程序裏最基本的函數就是read和write函數了。
寫函數write
ssize_t write(int fd, const void*buf,size_t nbytes);
write函數將buf中的nbytes字節內容寫入文件描述符fd.成功時返回寫的字節數.失敗時返回-1. 並設置errno變量.
讀函數read
ssize_t read(int fd,void *buf,size_t nbyte)
read函數是負責從fd中讀取內容.當讀成功 時,read返回實際所讀的字節數,若是返回的值是0 表示已經讀到文件的結束了,小於0表示出現了錯誤.若是錯誤爲EINTR說明讀是由中斷引發 的, 若是是ECONNREST表示網絡鏈接出了問題.
recv和send
recv和send函數提供了和read和write差很少的功能.不過它們提供了第四個參數來控制讀寫操做.
int recv(int sockfd,void *buf,int len,int flags)
int send(int sockfd,void *buf,int len,int flags)
前面的三個參數和read,write同樣,第四個參數能夠是0或者是如下的組合
_______________________________________________________________
| MSG_DONTROUTE | 不查找表 |
| MSG_OOB | 接受或者發送帶外數據 |
| MSG_PEEK | 查看數據,並不從系統緩衝區移走數據 |
| MSG_WAITALL | 等待全部數據 |
|--------------------------------------------------------------|
MSG_DONTROUTE:是send函數使用的標誌.這個標誌告訴IP.目的主機在本地網絡上面,沒有必要查找表.這個標誌通常用網絡診斷和路由程序裏面.
MSG_OOB:表示能夠接收和發送帶外的數據.關於帶外數據咱們之後會解釋的.
MSG_PEEK:是recv函數的使用標誌,表示只是從系統緩衝區中讀取內容,而不清除系統緩衝區的內容.這樣下次讀的時候,仍然是同樣的內容.通常在有多個進程讀寫數據時可使用這個標誌.
MSG_WAITALL是recv函數的使用標誌,表示等到全部的信息到達時才返回.使用這個標誌的時候recv回一直阻塞,直到指定的條件知足,或者是發生了錯誤. 1)當讀到了指定的字節時,函數正常返回.返回值等於len 2)當讀到了文件的結尾時,函數正常返回.返回值小於len 3)當操做發生錯誤時,返回-1,且設置錯誤爲相應的錯誤號(errno).若是flags爲0,則和read,write同樣的操做.還有其它的幾個選項,不過咱們實際上用的不多,能夠查看 Linux Programmer's Manual獲得詳細解釋。
視頻下載連接:
連接:https://pan.baidu.com/s/1_EMW1AtiqlvqZUY47jD5Mg 提取碼:bmhv 複製這段內容後打開百度網盤手機App,操做更方便