C 網路程式設計

2021-08-07 09:45:32 字數 2627 閱讀 1636

一些網路程式設計方面的知識,主要是socket的建立、網路連線方面的知識。以便了解和學習使用。

1、載入標頭檔案和庫檔案

#include 

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

2、伺服器端socket的建立、繫結以及監聽

wsadata wsa;//wsadata結構被用來儲存函式wsastartup返回的windows sockets初始化資訊

// 載入winsock庫並確定winsock版本,系統會把資料填入wsadata中

if(wsastartup(makeword(2,2),&wsa)!=0)

//建立套接字

socket serversocket;

if((serversocket=socket(af_inet,sock_stream,ipproto_tcp))==invalid_socket)

short port = 9000;

struct sockaddr_in serveraddress;

//初始化指定的記憶體區域

memset(&serveraddress,0,sizeof(sockaddr_in));

serveraddress.sin_family=af_inet; // 使用ipv4位址,tcp/ip協議族

serveraddress.sin_addr.s_un.s_addr = htonl(inaddr_any); // inaddr_any是指任意位址,意指後面監聽的是任意位址

serveraddress.sin_port = htons(port);

//繫結

if(bind(serversocket,(sockaddr*)&serveraddress,sizeof(serveraddress))==socket_error)

//進入偵聽狀態,somaxconn表示最多有5個連線佇列

if(listen(serversocket,somaxconn)==socket_error)

socket clientsocket;//用來和客戶端通訊的套接字

struct sockaddr_in clientaddress;//用來和客戶端通訊的套接字位址

memset(&clientaddress,0,sizeof(clientaddress));//初始化存放客戶端資訊的記憶體

int addrlen =sizeof(clientaddress);

//接受連線

if((clientsocket=accept(serversocket(sockaddr*)&clientaddress,&addrlen))==invalid_socket)

3、客戶端socket的建立、繫結以及連線

socket m_sock;

bool creatconnect(const

std::string &serverip, const

std::string &serverport)

// 建立套接字

if ( (m_sock=socket(af_inet,sock_stream,ipproto_tcp))==invalid_socket )

bool bconnect = connect(m_sock, serverip, serverport);

g_markreceive = 1;

return bconnect;

}//獲取伺服器ip

unsigned

long getserverip(const

std::string &serverip)

return ip;

}bool connect(socket &sock, const

std::string &serverip, const

std::string &serverport)

return

true;

}bool recvdata()

// 傳送資訊

void sendmsg(std::string strsenddata, const

int &ichangdata)

}else

return;

}// 接受資料

void receive(void *param)

buf[bytes]='\0';

std::string strtmp = buf;

}return;

}

3、客戶端和伺服器端的主要不同

1、建立sockaddr_in 時有一點不一樣,關於ip那一部分:server端是htonl(inaddr_any);意指任意ip位址,也可以指定位址端,但是client端必須指定伺服器位址;

2、伺服器端在建立後要設定監聽,以便與客戶端連線;而客戶端建立連線就可以

這是個人認為server端和client端不同的地方(在**方面)

接下來是setsockopt、recv、send的介紹

這個**中有對[setsockopt]完整的介紹(

對[recv和send]的完整介紹(

C 網路程式設計

首先我們解釋一下在網路程式設計時候,經常遇到的幾個概念 同步 synchronous 非同步 asynchronous 阻塞 block 和非阻塞 unblock 所謂同步方式,就是傳送方傳送資料報以後,不等接受方響應,就接著傳送下乙個資料報。非同步方式就是當傳送方傳送乙個資料報以後,一直等到接受方...

C 網路程式設計

1 ip網路中的每台主機都有乙個ip位址 它是邏輯位址 網際網路上的ip位址具有全球唯一性 4個位元組,192.168.0.16 2 osi將網路分為 tcp ip模型 應用層 應用層 表示層會話層 傳輸層 傳輸層 網路層 網路層 資料鏈路層 網路介面 物理層相同層次之間不可以直接通訊,是虛擬通訊。...

c 網路程式設計

microsoft.framework為應用程式訪問inter 提供了分層的 可擴充套件的以及受管轄的網路服務,其名字空間system.和system.sockets包含豐富的類可以開發多種網路應用程式。類採用的分層結構允許應用程式在不同的控制級別上訪問網路,開發人員可以根據需要選擇針對不同的級別編...