linux下得socket
//建立套接字
int serv_sock = socket(af_inet, sock_stream, ipproto_tcp);
引數 af_inet 表示使用 ipv4 位址
sock_stream 表示使用面向連線的套接字
ipproto_tcp 表示使用 tcp 協議
windows下得socket
//建立套接字
socket servsock = socket(pf_inet, sock_stream, ipproto_tcp);
//將套接字和ip、埠繫結
struct sockaddr_in serv_addr;
memset(&serv_addr, 0, sizeof(serv_addr)); //每個位元組都用0填充
serv_addr.sin_family = af_inet; //使用ipv4位址
serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); //具體的ip位址
serv_addr.sin_port = htons(1234); //埠
bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
通過 bind() 函式將套接字 serv_sock 與特定的 ip 位址和埠繫結,ip 位址和埠都儲存在 sockaddr_in 結構體中。
windows下得socket
bind(servsock, (sockaddr*)&sockaddr, sizeof(sockaddr));
socket() 函式確定了套接字的各種屬性,bind() 函式讓套接字與特定的ip位址和埠對應起來
//進入監聽狀態,等待使用者發起請求
listen(serv_sock, 20);
被動監聽狀態 是指套接字一直處於「睡眠」中,直到客戶端發起請求才會被「喚醒」。
windows下得socket
//進入監聽狀態
listen(servsock, 20);
//接收客戶端請求
struct sockaddr_in clnt_addr;
socklen_t clnt_addr_size = sizeof(clnt_addr);
int clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);
accept() 函式用來接收客戶端的請求。程式一旦執行到 accept() 就會被阻塞(暫停執行),直到客戶端發起請求。
windows下得socket
socket clntsock = accept(servsock, (sockaddr*)&clntaddr, &nsize);
//向客戶端傳送資料
char str = "";
write(clnt_sock, str, sizeof(str));
write() 函式用來向套接字檔案中寫入資料,也就是向客戶端傳送資料。
socket 在使用完畢後也要用 close() 關閉。
//向伺服器(特定的ip和埠)發起請求
struct sockaddr_in serv_addr;
memset(&serv_addr, 0, sizeof(serv_addr)); //每個位元組都用0填充
serv_addr.sin_family = af_inet; //使用ipv4位址
serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); //具體的ip位址
serv_addr.sin_port = htons(1234); //埠
connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
通過 connect() 向伺服器發起請求,伺服器的ip位址和埠號儲存在 sockaddr_in 結構體中。直到伺服器傳回資料後,connect() 才執行結束。
//讀取伺服器傳回的資料
char buffer[40];
read(sock, buffer, sizeof(buffer)-1);
通過 read() 從套接字檔案中讀取資料。
windows下得socket
send(clntsock, str, strlen(str)+sizeof(char), null);
windows 下的 socket 程式依賴 winsock.dll 或 ws2_32.dll,必須提前載入。
dll 有兩種載入方式隱式載入(載入時載入)和顯式載入(執行時載入)
linux 不區分 socket 檔案和普通檔案,而 windows 區分;linux 下 socket() 函式的返回值為 int 型別,而 windows 下為 socket 型別,也就是控制代碼。
linux 下使用 read() / write() 函式讀寫,而 windows 下使用 recv() / send() 函式傳送和接收。
關閉 socket 時,linux 使用 close() 函式,而 windows 使用 closesocket() 函式。
Socket網路程式設計 聊天程式 8
上一節已經完成了對使用者的身份驗證了,既然有了驗證,那麼接下來就能對不同的客戶端進行區分了,所以這一節講實現私聊功能。就是通過伺服器對客戶端的資料進行 到特定的使用者上,實現私聊功能的聊天程式 實現的技術細節是 對客戶端傳送的資料增加乙個標識頭,由於我們處理的是純文字,所以為了講解的方便就把標識頭加...
網路程式設計 Socket程式設計
一 網路部分 1.ip 2.埠號 在網路協議中使用埠號識別主機上不同的程序,不同的埠對應於不同的服務 應用程式 3.協議 tcp二 socket部門socket通訊基本流程圖 根據socket通訊基本流程圖,總結通訊的基本步驟 伺服器端 第一步 建立乙個用於監聽連線的socket對像 第二步 用指定...
socket網路程式設計
首先認識乙個表示主機資訊的結構體 struct hostent h addrtype 這是表示主機所使用的位址型別的定義,在c語言winsock2.h標頭檔案中以 af 開頭的巨集定義就是它的值。如果使用的是ipv4,則值為 af inet 如果是ipv6,值為 af inet4 h length ...