国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)-網(wǎng)絡(luò)聊天程序的設(shè)計(jì)與實(shí)現(xiàn)

這篇具有很好參考價(jià)值的文章主要介紹了計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)-網(wǎng)絡(luò)聊天程序的設(shè)計(jì)與實(shí)現(xiàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

前言

1 實(shí)驗(yàn)題目

2 實(shí)驗(yàn)?zāi)康?/p>

3 實(shí)驗(yàn)內(nèi)容

3.1?客戶端

3.1.1 步驟

3.1.2 關(guān)鍵代碼

3.2 服務(wù)器

3.2.1 步驟

3.2.2 關(guān)鍵代碼

4 實(shí)驗(yàn)結(jié)果與分析

5 代碼

5.1 客戶端

5.2 服務(wù)器


前言

????????本實(shí)驗(yàn)為計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)內(nèi)容,基本上所有代碼都是根據(jù)指導(dǎo)書給的附錄寫出來的。有些實(shí)驗(yàn)需要實(shí)現(xiàn)圖形界面,但是出于期末考試壓力,我所有實(shí)驗(yàn)均是在控制臺(tái)輸入輸出的,沒有花額外時(shí)間去學(xué)習(xí)qt了,有精力的同學(xué)可以自學(xué)一下qt實(shí)現(xiàn)簡(jiǎn)單的圖形界面。同時(shí),該博客內(nèi)容為部分報(bào)告內(nèi)容,僅為大家提供參考,請(qǐng)勿直接抄襲。另外,本次實(shí)驗(yàn)所用平臺(tái)是dev c++5.11

1 實(shí)驗(yàn)題目

????????實(shí)驗(yàn)一 網(wǎng)絡(luò)聊天程序的設(shè)計(jì)與實(shí)現(xiàn)

2 實(shí)驗(yàn)?zāi)康?/h2>

??????使用 WinSock API 的編程,了解 Socket 通信的原理,在此基礎(chǔ)上編寫一個(gè)聊天程序。

3 實(shí)驗(yàn)內(nèi)容

3.1?客戶端

3.1.1 步驟

????????(1)客戶端建立連接后接收服務(wù)器分配的通信套接字。

????????(2)開啟線程處理從服務(wù)器發(fā)送過來的數(shù)據(jù)。

????????(3)不斷循環(huán),接收用戶輸入,發(fā)送數(shù)據(jù)到服務(wù)器。

3.1.2 關(guān)鍵代碼

????????(1)接收服務(wù)器發(fā)送的數(shù)據(jù)的線程函數(shù)

void handleRecvData(SOCKET client) {
	while(1) {
		memset(recvBuf,'\0',strlen(recvBuf));
		recvCode= recv(client,recvBuf,sizeof(recvBuf),0);
		if(recvCode==-1) {
			cout<<"接收服務(wù)器數(shù)據(jù)異常!\n";
			closesocket(client);
			WSACleanup();
			break;
		}
		if(!flag)cout<<"\n";
		cout<<recvBuf<<"\n"<<"客戶端"<<name<<">";
		flag=0;
	}
}

? ? ? ? (2)main函數(shù)

int main() {
	// 接收服務(wù)器分配的通信套接字
	err = recv(sockClient, name, sizeof(name), 0);	
	// 開啟線程處理從服務(wù)器發(fā)送過來的數(shù)據(jù)
	thread t(handleRecvData, sockClient);
	t.detach();
	// 不斷循環(huán),接收用戶輸入,發(fā)送數(shù)據(jù)到服務(wù)器
	while (1) {
		memset(sendBuf,'\0',strlen(sendBuf));
		cin>>sendBuf;
		flag=1;
		if(!strcmp(sendBuf,"quit")) {
			send(sockClient,"quit",strlen("quit")+1,0);
			cout<<"通知服務(wù)器客戶端已關(guān)閉連接!\n";
			closesocket(sockClient);
			WSACleanup();
			break;
		}
		err = send(sockClient,sendBuf,strlen(sendBuf)+1,0);
		if(err == -1){
			cout<<"客戶端發(fā)送數(shù)據(jù)失敗!\n";
			break;
		} 
	}
}

3.2 服務(wù)器

3.2.1 步驟

????????(1)服務(wù)器端初始化,綁定地址并開始監(jiān)聽客戶端連接請(qǐng)求。

????????(2)接受客戶端連接請(qǐng)求,為每個(gè)客戶端分配套接字,并加入客戶端列表。

????????(3)開啟線程處理客戶端發(fā)來的數(shù)據(jù),同時(shí)遍歷客戶端列表,將接收到的信息發(fā)送給其他客戶端。

3.2.2 關(guān)鍵代碼

????????(1)處理客戶端主要功能代碼

void handleClient(SOCKET client) {
	while(1) {
		memset(recvBuf,'\0',strlen(recvBuf));
		memset(sendBuf,'\0',strlen(sendBuf));
		recvCode= recv(client,recvBuf,sizeof(recvBuf),0);
		cout<<"recvCode :"<<recvCode<<"\n";
		if(recvCode==-1||!strcmp(recvBuf,"quit")) {
			//刪除斷開連接的客戶端
			cout<<"客戶端"<<client<<"已關(guān)閉連接!\n";
clientList.erase(remove(clientList.begin(),clientList.end(),client));
			closesocket(client);
			cout<<"刪除斷開連接的 client 后,clientList 包含 client 的個(gè)數(shù):"<<clientList.size()<<"\n";
			break;
		} else {
	cout<<"clientList 包含 client 的個(gè)數(shù):"<<clientList.size()<<"\n";
		}
		cout<<"接收到客戶端"<<client<<"的數(shù)據(jù):"<<recvBuf<<"\n";
		for(int i=0; i<clientList.size(); i++) {
			sprintf(sendBuf,"群聊信息---客戶端%d>%s",client,recvBuf);
			sendCode = send(clientList[i],sendBuf,strlen(sendBuf)+1,0);
			cout<<"服務(wù)器發(fā)送數(shù)據(jù):\""<<sendBuf<<"\",給客戶端"<<clientList[i]<<",sendCode :"<<sendCode<<"\n";
		}
	}
}

????????(2)main函數(shù)

int main() {
// 循環(huán)接受客戶端連接請(qǐng)求,為每個(gè)客戶端分配套接字,加入客戶端列表并單獨(dú)處理
while(1) {
		memset(id,'\0',strlen(id));
		cout<<"等待新客戶端連接\n";
		SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
		if(sockConn==-1) {
			cout<<"新客戶端連接失敗\n";
			closesocket(sockConn);
			closesocket(sockSrv);
			WSACleanup();
		} else {
			cout<<"新客戶端連接成功\n";
			sprintf(id,"%d",sockConn);
			sendCode = send(sockConn,id,strlen(id)+1,0);
	cout<<"為新客戶端分配套接字:"<<id<<", sendCode :"<<sendCode<<"\n";
			clientList.push_back(sockConn);
			thread t(handleClient,sockConn);
			t.detach();
		}
	}

4 實(shí)驗(yàn)結(jié)果與分析

(1)啟動(dòng)服務(wù)器等待客戶端連接。

計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)-網(wǎng)絡(luò)聊天程序的設(shè)計(jì)與實(shí)現(xiàn),計(jì)算機(jī)網(wǎng)絡(luò),計(jì)算機(jī)網(wǎng)絡(luò)

圖1.1 啟動(dòng)服務(wù)器

(2)啟動(dòng)3個(gè)客戶端加入聊天。

計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)-網(wǎng)絡(luò)聊天程序的設(shè)計(jì)與實(shí)現(xiàn),計(jì)算機(jī)網(wǎng)絡(luò),計(jì)算機(jī)網(wǎng)絡(luò)

圖1.2 啟動(dòng)客戶端

(3)客戶端280發(fā)送消息,可以在客戶端252和260收到信息。

計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)-網(wǎng)絡(luò)聊天程序的設(shè)計(jì)與實(shí)現(xiàn),計(jì)算機(jī)網(wǎng)絡(luò),計(jì)算機(jī)網(wǎng)絡(luò)

圖1.3 客戶端280發(fā)送信息文章來源地址http://www.zghlxwxcb.cn/news/detail-802967.html

5 代碼

5.1 客戶端

#include <stdio.h>
#include <bits/stdc++.h>
#include<iostream>
#include<string>
#include<sstream>
#include<cstdio>
#include<vector>
#include<thread>
#include <Winsock2.h>

using namespace std;

typedef long long LL;
const int maxn = 100;
const int maxRecv = 128;
const int maxSend = maxRecv + 20;

char name[6]="\0";
int flag = 0;

void handleRecvData(SOCKET client) {
	char recvBuf[maxRecv];
	int recvCode;
	while(1) {
		memset(recvBuf,'\0',strlen(recvBuf));
		recvCode= recv(client,recvBuf,sizeof(recvBuf),0);
//		cout<<"recvCode :"<<recvCode<<"\n";
		if(recvCode==-1) {
			cout<<"接收服務(wù)器數(shù)據(jù)異常!\n";
			closesocket(client);
			//shutdown(client,2);
			WSACleanup();
			break;
		}
//		cout<<"接收的的數(shù)據(jù):"<<recvBuf;
		if(!flag)cout<<"\n";
		cout<<recvBuf;
		cout<<"\n";
		flag=0;
//		if(flag) {
//			flag=0;
//		}
//		if(!flag) {
		cout<<"客戶端"<<name<<">";
//			cout<<"\n";
//		}
//		cout<<"\n請(qǐng)輸入要發(fā)送數(shù)據(jù):\n";
	}
}

int main() {
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;
	wVersionRequested = MAKEWORD( 1, 1 );

	err = WSAStartup( wVersionRequested, &wsaData );
	if ( err != 0 ) {
		return 0;
	}
	if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) {
		WSACleanup();
		return 0;
	}

	SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
	if(sockClient==-1) {
		cout<<"創(chuàng)建客戶端失敗"<<"\n";
		closesocket(sockClient);
		WSACleanup();
		return 0;
	}
	cout<<"創(chuàng)建客戶端成功"<<"\n";

	SOCKADDR_IN addrSrv;
	addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
	addrSrv.sin_family=AF_INET;
	addrSrv.sin_port=htons(6000);

	err = connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
	if(err==-1) {
		closesocket(sockClient);
		WSACleanup();
		cout<<"連接服務(wù)器失敗"<<"\n";
	}
	cout<<"連接服務(wù)器成功\n";

	err = recv(sockClient,name,sizeof(name),0);
	if(err==-1) {
		closesocket(sockClient);
		WSACleanup();
		cout<<"獲取服務(wù)器分配的通信套接字失敗"<<"\n";
	}
	cout<<"服務(wù)器分配的通信套接字:"<<name<<"\n";
	cout<<"-------------------------------------------\n";

	//開啟線程處理從服務(wù)器發(fā)送過來的數(shù)據(jù)
	thread t(handleRecvData,sockClient);
	t.detach();

	char sendBuf[maxSend]="\0";
	cout<<"客戶端"<<name<<">";
	while(1) {
		memset(sendBuf,'\0',strlen(sendBuf));
//		cout<<"請(qǐng)輸入要發(fā)送數(shù)據(jù):\n";
//		cout<<"客戶端"<<name<<">";
		cin>>sendBuf;
		flag=1;
		if(!strcmp(sendBuf,"quit")) {
			send(sockClient,"quit",strlen("quit")+1,0);
			cout<<"通知服務(wù)器客戶端已關(guān)閉連接!\n";
			closesocket(sockClient);
			WSACleanup();
			break;
		}
		err = send(sockClient,sendBuf,strlen(sendBuf)+1,0);
//		cout<<"sendCode :"<<err<<"\n"; 
		if(err == -1){
			cout<<"客戶端發(fā)送數(shù)據(jù)失??!\n";
//			closesocket(sockClient);
//			WSACleanup();
			break;
		} 
		//while(flag==1);
//		cout<<"客戶端"<<name<<"發(fā)送數(shù)據(jù):"<<sendBuf<<"\n";
//		char recvBuf[50]="\0";
//		cout<<recv(sockClient,recvBuf,50,0)<<"\n";
//		cout<<"接收到服務(wù)器數(shù)據(jù):";
//		printf("%s\n",recvBuf);
		//cout<<closesocket(sockClient)<<"\n";
		//WSACleanup();
		//cout<<connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR))<<"\n";
		//cout<<"服務(wù)器連接成功\n";
	}
	closesocket(sockClient);
	WSACleanup();
	return 0;
}

5.2 服務(wù)器

#include <stdio.h>
#include <bits/stdc++.h>
#include<iostream>
#include<string>
#include<vector>
#include<thread>
#include <Winsock2.h>
#pragma comment(lib,"ws2_32")
using namespace std;

typedef long long LL;
const int maxn = 100;
const int maxRecv = 128;
const int maxSend = maxRecv + 20;

//SOCKET clientList[maxn];
vector<SOCKET> clientList;

void handleClient(SOCKET client) {
	char recvBuf[maxRecv]="\0";
	char sendBuf[maxSend]="\0";
	int recvCode;
	int sendCode;
	while(1) {
		memset(recvBuf,'\0',strlen(recvBuf));
		memset(sendBuf,'\0',strlen(sendBuf));
		recvCode= recv(client,recvBuf,sizeof(recvBuf),0);
		cout<<"recvCode :"<<recvCode<<"\n";
		if(recvCode==-1||!strcmp(recvBuf,"quit")) {
			//刪除斷開連接的客戶端
			cout<<"客戶端"<<client<<"已關(guān)閉連接!\n";
			clientList.erase(remove(clientList.begin(),clientList.end(),client));
			closesocket(client);
			//shutdown(client,2);
			cout<<"刪除斷開連接的 client 后,clientList 包含 client 的個(gè)數(shù):"<<clientList.size()<<"\n";
			break;
		} else {
			cout<<"clientList 包含 client 的個(gè)數(shù):"<<clientList.size()<<"\n";
		}

		cout<<"接收到客戶端"<<client<<"的數(shù)據(jù):"<<recvBuf<<"\n";
//		printf("%s\n",recvBuf);

		for(int i=0; i<clientList.size(); i++) {
//			if(clientList[i]==client) {
//				cout<<"跳過 client:"<<client<<"\n";
//				continue;
//			}
			sprintf(sendBuf,"群聊信息---客戶端%d>%s",client,recvBuf);
			sendCode = send(clientList[i],sendBuf,strlen(sendBuf)+1,0);
//			sendCode = send(clientList[i],recvBuf,strlen(recvBuf)+1,0);
			cout<<"服務(wù)器發(fā)送數(shù)據(jù):\""<<sendBuf<<"\",給客戶端"<<clientList[i]<<",sendCode :"<<sendCode<<"\n";
//			cout<<"sendCode :"<<sendCode<<"\n";
		}
	}
}
int main() {
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;
//	vector<SOCKET> clientList;

	wVersionRequested = MAKEWORD( 1, 1 );

	err = WSAStartup( wVersionRequested, &wsaData );
	if ( err != 0 ) {
		cout<<"初始化套接字庫失敗"<<"\n";
		return 0;
	}
	cout<<"初始化套接字庫成功"<<"\n";
	if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) {
		WSACleanup();
		cout<<"確定協(xié)議失敗"<<"\n";
		return 0;
	}
	cout<<"確定協(xié)議成功"<<"\n";
	SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
	if(sockSrv==-1) {
		closesocket(sockSrv);
		WSACleanup();
		cout<<"創(chuàng)建服務(wù)器失敗"<<"\n";
		return 0;
	}
	cout<<"創(chuàng)建服務(wù)器成功"<<"\n";
	cout<<"sockSrv :"<<sockSrv<<"\n";
	SOCKADDR_IN addrSrv;
	//htonl函數(shù)把主機(jī)字節(jié)轉(zhuǎn)化成網(wǎng)絡(luò)字節(jié)的函數(shù);u_long htonl(u_long hostlong);
	addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
	addrSrv.sin_family=AF_INET;
	addrSrv.sin_port=htons(6000);

	//綁定
	err = bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
	if(err==-1) {
		closesocket(sockSrv);
		WSACleanup();
		cout<<"服務(wù)器綁定失敗"<<"\n";
		return 0;
	}
	cout<<"服務(wù)器綁定成功"<<"\n";

	err = listen(sockSrv,5);
	if(err==-1) {
		closesocket(sockSrv);
		WSACleanup();
		cout<<"監(jiān)聽失敗"<<"\n";
		return 0;
	}
	cout<<"監(jiān)聽成功"<<"\n";
	cout<<"-------------------------------------------\n";
	
	SOCKADDR_IN addrClient;
	int len=sizeof(SOCKADDR);
	char id[6]="\0";
	int sendCode;
	while(1) {
		memset(id,'\0',strlen(id));
		cout<<"等待新客戶端連接\n";
		SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
		if(sockConn==-1) {
			cout<<"新客戶端連接失敗\n";
			closesocket(sockConn);
			closesocket(sockSrv);
			WSACleanup();
		} else {
			cout<<"新客戶端連接成功\n";
//			cout<<"sockConn :"<<sockConn<<"\n";
			sprintf(id,"%d",sockConn);
//			cout<<"分配給新客戶端的套接字:"<<id<<"\n";
			sendCode = send(sockConn,id,strlen(id)+1,0);
			cout<<"為新客戶端分配套接字:"<<id<<", sendCode :"<<sendCode<<"\n";
			clientList.push_back(sockConn);
			thread t(handleClient,sockConn);
			t.detach();
		}
//		char sendBuf[50];
		cout<<"請(qǐng)輸入要發(fā)送數(shù)據(jù):\n";
		cin>>sendBuf;
//		sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr));
//		cout<<send(sockConn,sendBuf,strlen(sendBuf)+1,0)<<"\n";
//		cout<<"服務(wù)器發(fā)送數(shù)據(jù):"<<sendBuf<<"\n";
//		char recvBuf[50];
//		cout<<recv(sockConn,recvBuf,50,0)<<"\n";
//		if(!strcmp(recvBuf,"quit")) {
//			cout<<"客戶端已關(guān)閉連接!";
//			break;
//		} else  {
//			cout<<"接收到客戶端數(shù)據(jù):";
//			printf("%s\n",recvBuf);
//		}
//		cout<<closesocket(sockConn)<<"\n";
		//cout<<"服務(wù)器關(guān)閉連接\n";
	}
	//closesocket(sockConn);
	WSACleanup();
	return 0;
}

到了這里,關(guān)于計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)-網(wǎng)絡(luò)聊天程序的設(shè)計(jì)與實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 計(jì)算機(jī)網(wǎng)絡(luò)課程實(shí)驗(yàn)4——編程實(shí)現(xiàn)路由算法(迪杰斯特拉算法)

    計(jì)算機(jī)網(wǎng)絡(luò)課程實(shí)驗(yàn)4——編程實(shí)現(xiàn)路由算法(迪杰斯特拉算法)

    實(shí)驗(yàn)?zāi)康模?運(yùn)用各種編程語言實(shí)現(xiàn)基于 Dijkstra 算法的路由軟件。 實(shí)驗(yàn)意義: 通過本實(shí)驗(yàn),使學(xué)生能夠?qū)β酚稍砗吐酚伤惴ㄓ羞M(jìn)一步的理解和掌握。 實(shí)驗(yàn)步驟: 1, 選擇合適的編程語言編程實(shí)現(xiàn)基于 Dijkstra 算法的路由軟件。 輸入不同的網(wǎng)絡(luò)拓?fù)浜玩溌反鷥r(jià)測(cè)試和驗(yàn)證自己

    2024年02月06日
    瀏覽(27)
  • 云計(jì)算:計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)(第二天課程分享)DNS協(xié)議 各協(xié)議

    云計(jì)算:計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)(第二天課程分享)DNS協(xié)議 各協(xié)議

    HTTP--tcp 80 ----超文本傳輸協(xié)議? ? HTTPS---tcp 443 安全傳輸協(xié)議? FTP tcp 20/21 文件傳輸協(xié)議? ? TFTP udp 69 簡(jiǎn)單文件傳輸?? Telnet TCP 23 遠(yuǎn)程登錄協(xié)議?? SSH tcp 22 安全外殼協(xié)議 DNS UDP/TCP 53 域名解析協(xié)議? DHCP UDP 67/68 動(dòng)態(tài)主機(jī)配置協(xié)議?? ? 傳輸層協(xié)議:TCP/UDP TCP-----傳輸控制協(xié)議----

    2024年02月04日
    瀏覽(19)
  • 計(jì)算機(jī)網(wǎng)絡(luò)課程 day1 基本概念-交換機(jī)-路由器 計(jì)算機(jī)網(wǎng)絡(luò)的參考模型

    計(jì)算機(jī)網(wǎng)絡(luò)課程 day1 基本概念-交換機(jī)-路由器 計(jì)算機(jī)網(wǎng)絡(luò)的參考模型

    目錄 學(xué)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)課程的目標(biāo)和意義:? 計(jì)算機(jī)網(wǎng)絡(luò)的基本概念 常用網(wǎng)絡(luò)設(shè)備: network device 交換機(jī):組建局域網(wǎng)使用的,將很多電腦連接起來,組成一個(gè)局域網(wǎng)絡(luò),可以一起打游戲/上網(wǎng) 路由器:實(shí)現(xiàn)跨網(wǎng)段通信使用,把網(wǎng)絡(luò)里的數(shù)據(jù)從一個(gè)地方轉(zhuǎn)發(fā)到另一個(gè)地方??梢?/p>

    2024年02月13日
    瀏覽(95)
  • 哈工大計(jì)算機(jī)網(wǎng)絡(luò)課程傳輸層協(xié)議之:擁塞控制原理剖析

    哈工大計(jì)算機(jī)網(wǎng)絡(luò)課程傳輸層協(xié)議之:擁塞控制原理剖析

    哈工大計(jì)算機(jī)網(wǎng)絡(luò)課程傳輸層協(xié)議詳解之:可靠數(shù)據(jù)傳輸?shù)幕驹?哈工大計(jì)算機(jī)網(wǎng)絡(luò)課程傳輸層協(xié)議詳解之:流水線機(jī)制與滑動(dòng)窗口協(xié)議 哈工大計(jì)算機(jī)網(wǎng)絡(luò)課程傳輸層協(xié)議詳解之:TCP協(xié)議 **擁塞(Congestion)** 非正式定義:“太多發(fā)送主機(jī)發(fā)送了太多數(shù)據(jù)或者發(fā)送速度太快

    2024年02月11日
    瀏覽(29)
  • 哈工大計(jì)算機(jī)網(wǎng)絡(luò)課程網(wǎng)絡(luò)層協(xié)議詳解之:互聯(lián)網(wǎng)控制報(bào)文協(xié)議(ICMP)

    哈工大計(jì)算機(jī)網(wǎng)絡(luò)課程網(wǎng)絡(luò)層協(xié)議詳解之:互聯(lián)網(wǎng)控制報(bào)文協(xié)議(ICMP)

    在互聯(lián)網(wǎng)中,IP數(shù)據(jù)報(bào)的傳輸很容易出現(xiàn)差錯(cuò),當(dāng)出現(xiàn)差錯(cuò)時(shí),最簡(jiǎn)單的處理辦法就是對(duì)該IP數(shù)據(jù)報(bào)進(jìn)行丟棄。但是,并不是直接丟棄就完了,為了讓源主機(jī)感知到數(shù)據(jù)報(bào)出現(xiàn)差錯(cuò),當(dāng)數(shù)據(jù)報(bào)被丟棄時(shí),IP網(wǎng)絡(luò)會(huì)借助于ICMP協(xié)議,向發(fā)送數(shù)據(jù)報(bào)的源主機(jī)發(fā)送一個(gè)ICMP差錯(cuò)報(bào)文。本

    2024年02月12日
    瀏覽(21)
  • 哈工大計(jì)算機(jī)網(wǎng)絡(luò)課程網(wǎng)絡(luò)層協(xié)議詳解之:路由算法概述與鏈路狀態(tài)路由算法

    哈工大計(jì)算機(jī)網(wǎng)絡(luò)課程網(wǎng)絡(luò)層協(xié)議詳解之:路由算法概述與鏈路狀態(tài)路由算法

    在前面的小節(jié)中,我們介紹了網(wǎng)絡(luò)中路由器的路由與轉(zhuǎn)發(fā)等功能。我們說 作為網(wǎng)絡(luò)層,從功能上來說,核心功能就是要實(shí)現(xiàn)路由和轉(zhuǎn)發(fā)。 對(duì)于轉(zhuǎn)發(fā)來說,實(shí)際上就是路由器根據(jù)存儲(chǔ)的轉(zhuǎn)發(fā)表,將目的地址轉(zhuǎn)發(fā)到對(duì)應(yīng)的輸出鏈路上去。在這個(gè)過程中,完成轉(zhuǎn)發(fā)的重要依據(jù),就

    2024年02月11日
    瀏覽(23)
  • 哈工大計(jì)算機(jī)網(wǎng)絡(luò)課程局域網(wǎng)詳解之:交換機(jī)概念

    哈工大計(jì)算機(jī)網(wǎng)絡(luò)課程局域網(wǎng)詳解之:交換機(jī)概念

    在介紹完局域網(wǎng)中最具代表性的以太網(wǎng)技術(shù)后,接下來我們繼續(xù)來看一下在局域網(wǎng)中使用非常廣泛也是非常重要的網(wǎng)絡(luò)設(shè)備:交換機(jī)。 本節(jié)主要面向以太網(wǎng)來介紹其中使用的交換機(jī)。 作為以太網(wǎng)交換機(jī)來說,是一個(gè)典型的數(shù)據(jù)鏈路層設(shè)備,可以實(shí)現(xiàn)對(duì)鏈路層數(shù)據(jù)幀的存儲(chǔ)-轉(zhuǎn)

    2024年02月15日
    瀏覽(24)
  • 哈工大計(jì)算機(jī)網(wǎng)絡(luò)課程局域網(wǎng)詳解之:無線局域網(wǎng)

    哈工大計(jì)算機(jī)網(wǎng)絡(luò)課程局域網(wǎng)詳解之:無線局域網(wǎng)

    本節(jié)介紹一下平時(shí)經(jīng)常使用的一個(gè)無線局域網(wǎng)技術(shù),也就是通常我們使用的wifi。 wifi是IEEE 802.11這樣一個(gè)系列標(biāo)準(zhǔn)所定義的無線局域網(wǎng)。作為802.11局域網(wǎng)來說,實(shí)際上存在很多版本: 802.11b 2.4-2.5GHz免費(fèi)頻段(unliebensed spectrum) 最高速率:11Mbps 物理層采用直接序列擴(kuò)頻(DSSS)

    2024年02月15日
    瀏覽(23)
  • 哈工大計(jì)算機(jī)網(wǎng)絡(luò)課程網(wǎng)絡(luò)安全基本原理詳解之:消息完整性與數(shù)字簽名

    哈工大計(jì)算機(jī)網(wǎng)絡(luò)課程網(wǎng)絡(luò)安全基本原理詳解之:消息完整性與數(shù)字簽名

    這一小節(jié),我們繼續(xù)介紹網(wǎng)絡(luò)完全中的另一個(gè)重要內(nèi)容,就是消息完整性,也為后面的數(shù)字簽名打下基礎(chǔ)。 首先來看一下什么是報(bào)文完整性。 報(bào)文完整性,也稱為消息完整性(message integrity),有時(shí)也稱為報(bào)文/消息認(rèn)證(或報(bào)文鑒別),目標(biāo): 證明報(bào)文確實(shí)來自聲稱的發(fā)送

    2024年02月15日
    瀏覽(20)
  • 哈工大計(jì)算機(jī)網(wǎng)絡(luò)課程數(shù)據(jù)鏈路層協(xié)議詳解之:多路訪問控制(MAC)協(xié)議

    哈工大計(jì)算機(jī)網(wǎng)絡(luò)課程數(shù)據(jù)鏈路層協(xié)議詳解之:多路訪問控制(MAC)協(xié)議

    在上一小節(jié)介紹完數(shù)據(jù)鏈路層功能和所提供的服務(wù)后,接下來我們介紹一個(gè)在 數(shù)據(jù)鏈路層非常重要的一個(gè)協(xié)議:多路訪問控制MAC協(xié)議。 多路訪問控制主要是為了解決一類鏈路的使用問題。作為網(wǎng)路中的鏈路,大致可以分為以下兩類: 點(diǎn)對(duì)點(diǎn)鏈路 顧名思義,鏈路只連接兩個(gè)相

    2024年02月15日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包