和c語言教程一樣,我們從乙個簡單的「hello world!」程式切入 socket 程式設計。
本節演示了 linux 下的**,server.cpp 是伺服器端**,client.cpp 是客戶端**,要實現的功能是:客戶端從伺服器讀取乙個字串並列印出來。
伺服器端** server.cpp:
#include#include
#include
#include
#include
#include
#include
int main()
客戶端** client.cpp:
#include#include
#include
#include
#include
#include
int main()
啟動乙個終端(shell),先編譯 server.cpp 並執行:
[admin@localhost ~]$ g++ server.cpp -o server
[admin@localhost ~]$ ./server
#等待請求的到來
正常情況下,程式執行到 accept() 函式就會被阻塞,等待客戶端發起請求。
接下再啟動乙個終端,編譯 client.cpp 並執行:
[admin@localhost ~]$ g++ client.cpp -o client
[admin@localhost ~]$ ./client
message form server:
client 接收到從 server傳送過來的字串就執行結束了,同時,server 完成傳送字串的任務也執行結束了。大家可以通過兩個開啟的終端來觀察。
client 執行後,通過 connect() 函式向 server 發起請求,處於監聽狀態的 server 被啟用,執行 accept() 函式,接受客戶端的請求,然後執行 write() 函式向 client 傳回資料。client 接收到傳回的資料後,connect() 就執行結束了,然後使用 read() 將資料讀取出來。
server 只接受一次 client 請求,當 server 向 client 傳回資料後,程式就執行結束了。如果想再次接收到伺服器的資料,必須再次執行 server,所以這是乙個非常簡陋的 socket 程式,不能夠一直接受客戶端的請求。1) 先說一下 server.cpp 中的**。
第 11 行通過 socket() 函式建立了乙個套接字,引數 af_inet 表示使用 ipv4 位址,sock_stream 表示使用面向連線的套接字,ipproto_tcp 表示使用 tcp 協議。在 linux 中,socket 也是一種檔案,有檔案描述符,可以使用 write() / read() 函式進行 i/o 操作,這一點已在《socket是什麼》中進行了講解。
第 19 行通過 bind() 函式將套接字 serv_sock 與特定的 ip 位址和埠繫結,ip 位址和埠都儲存在 sockaddr_in 結構體中。
socket() 函式確定了套接字的各種屬性,bind() 函式讓套接字與特定的ip位址和埠對應起來,這樣客戶端才能連線到該套接字。
第 22 行讓套接字處於被動監聽狀態。所謂被動監聽,是指套接字一直處於「睡眠」中,直到客戶端發起請求才會被「喚醒」。
第 27 行的 accept() 函式用來接收客戶端的請求。程式一旦執行到 accept() 就會被阻塞(暫停執行),直到客戶端發起請求。
第 31 行的 write() 函式用來向套接字檔案中寫入資料,也就是向客戶端傳送資料。
和普通檔案一樣,socket 在使用完畢後也要用 close() 關閉。
2) 再說一下 client.cpp 中的**。client.cpp 中的**和 server.cpp 中有一些區別。
第 19 行**通過 connect() 向伺服器發起請求,伺服器的ip位址和埠號儲存在 sockaddr_in 結構體中。直到伺服器傳回資料後,connect() 才執行結束。
第 23 行**通過 read() 從套接字檔案中讀取資料。
7 Linux下的socket演示程式
和c語言教程一樣,我們從乙個簡單的 hello world 程式切入 socket 程式設計。本節演示了 linux 下的 server.cpp 是伺服器端 client.cpp 是客戶端 要實現的功能是 客戶端從伺服器讀取乙個字串並列印出來。伺服器端 server.cpp include incl...
Windows下的socket演示程式
上節演示了 linux 下的 socket 程式,這節來看一下 windows 下的 socket 程式。同樣,server.cpp 為伺服器端 client 為客戶端 伺服器端 server.cpp include include pragma comment lib,ws2 32.lib 載入 ...
linux下socket程式設計
一 什麼是socket socket可以看成是使用者程序與核心網路協議棧的程式設計介面。socket不僅可以用於本機的程序間通訊,還可以用於網路上不同主機的程序間通訊。socket api是一層抽象的網路程式設計介面,適用於各種底層網路協議,如ipv4 ipv6。struct sockaddr in...