一些網路程式設計方面的知識,主要是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端必須指定伺服器位址;接下來是setsockopt、recv、send的介紹2、伺服器端在建立後要設定監聽,以便與客戶端連線;而客戶端建立連線就可以
這是個人認為server端和client端不同的地方(在**方面)
這個**中有對[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包含豐富的類可以開發多種網路應用程式。類採用的分層結構允許應用程式在不同的控制級別上訪問網路,開發人員可以根據需要選擇針對不同的級別編...