C 的Socket的使用原始碼

2022-07-22 10:54:19 字數 2233 閱讀 7246

#include "stdafx.h"

#include #include #include //一定要包含該標頭檔案

#include #pragma comment(lib, "ws2_32.lib")

void threadmethod(socket scoket);

void threadmethod(socket scoket) }}

//windwows下的socket程式設計函式庫

int main() ;

//建立乙個socket程式設計型別的網路位址資料結構這個用於本地

sockaddr_in remoteaddr = ;

//建立乙個socket程式設計型別的網路位址資料結構這個用於儲存遠端主機的

//ip位址和埠號

char sztext = "tcp server demo";

int naddrlen = 0;

naddrlen = sizeof(sockaddr_in);

//計算這個sockaddr_in資料結構的大小

sin.sin_port = htons(6636);

//設定本地(這裡指服務端)計算機要開啟的埠

sin.sin_family = af_inet; //設定網路通訊的網路協議族型別

sin.sin_addr.s_un.s_addr = inaddr_any;

//設定本地計算機的ip位址,一般inaddr_any在程式執行時

//會自動計算成本地的ip位址的

//init wsa

if (wsastartup(sockversion, &wsadata) != 0)

//wsastartup函式是在程式中初始化並載入windows網路

slisten = socket(af_inet, sock_stream, ipproto_tcp);

//在本機上建立乙個socket

//使用bind函式繫結本機的ip和開啟埠到本機建立的socket結構上,並初始化該socket

//重點說明乙個在伺服器上是用bind函式來初始化socket,在客戶機上是用connect函式來初始化socket的喔

if (bind(slisten, (lpsockaddr)&sin, sizeof(sin)) == socket_error)

if (listen(slisten, 2) == socket_error)

//listen是用來開啟本地計算機的埠,引數2表示客戶端同

//時連線伺服器的數量,這裡是說可以同時有2個客戶端連線

//到本機開啟的埠

socket sclient = inaddr_any;

//再伺服器上再建立乙個socket結構,用來儲存與乙個客戶端進行通訊連

//接的連線例項

while (true)

std::cout << "輸出文字" << std::endl;

//send函式是在tcp連線建立之後,就來傳送資料的。其中sclient是存放有乙個連線例項的socket結構來

//的。這個伺服器上的send函式的socket引數和客戶機上的socket引數是不同的喔,記住這裡的socket引數是通過

//accept函式建立的喔。不是用connet函式和bind函式建立喔。一定要記住這個sclient是乙個關鍵來的。然後

//sztext就是我們想要傳送的資料了。這裡我們向連線到該伺服器的客戶端傳送了乙個「tcp server demo」的資訊。

send(sclient, sztext, strlen(sztext), 0);

std::thread t(threadmethod, sclient);

t.join();

//closesocket(sclient);

//關閉這個用accept函式建立socket物件,關閉與remoteaddr連線通訊。

//remoteaddr這結構理包含了有遠端計算機的ip和埠號資訊,當客戶機

//使用connect函式傳送乙個連線請求時,被accept函式接受並處理後,遠

//程計算機的ip位址和埠資訊就被填到了remoteaddr這個結構中去

} closesocket(slisten);

//關閉本地計算機(伺服器)上的由bind函式建立的socket物件,關閉本機

//開啟的埠,關閉伺服器

wsacleanup();

//釋放ws2_32.dll動態庫

}

原始碼分析 socket的建立

這節主要介紹下socket建立的大致流程,我們只關注總體流程,流程總有很多細節,我們暫不去討論,隨著閱讀原始碼量的增加,這些細節問題會迎刃而解,有些機制會在後續其他章節介紹,以免影響此節主要內容分析。下面是建立socket的主體流程。static int sock create struct net...

socket程式設計例項(原始碼)

本例項使用面向連線協議的客戶 伺服器模式,其流程如圖2.3所示 圖2.3 面向連線的應用程式流程圖 伺服器方程式 include include define true 1 main server.sin family af inet server.sin port inaddr any if bi...

C語言多執行緒Socket服務原始碼

include include include include include include include include include include include include define maxline 1000 define listenq 20 define port 5000...