一.网络
OSI结构:
TCP/IP结构:
1.ip地址:唯一标识一台主机
网络号+主机号
2.MAC地址:
3.端口号:区分应用程序的编号
4.协议:网络规则的集合
5.ipv4结构:
6.tcp协议头部结构
7.信息传输过程(包装->分解)
二. 网络编程
ip+端口号:那一台主机的哪一个应用进程
*头文件:
1.虚拟机之间互联
<1>.主机端:
<2>.客户端:
2. 主机与虚拟机之间互联
(1)主机为主机端:
<1>.主机端
// ConsoleApptcp.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <WinSock2.h> //网络头文件
#include <string.h>
#include <ws2tcpip.h> //socklen_t
#include <iostream>
using namespace std;
#pragma comment(lib, "ws2_32.lib") //网络库文件
//初始化网络库
void InitNetwork() {
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(2, 2);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0)
{
return;
}
}
int main()
{
InitNetwork();
SOCKET sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == INVALID_SOCKET)
{
cout << "socket err" << endl;
return 0;
}
struct sockaddr_in saddr;
memset(&saddr, 0, sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons(6000);
saddr.sin_addr.S_un.S_addr = INADDR_ANY;
//saddr.sin_addr.S_un.S_addr = inet_pton(AF_INET,"192.168.1.50",NULL);
int res = bind(sockfd, (SOCKADDR*)&saddr, sizeof(saddr));
if (res == SOCKET_ERROR)
{
cout << "bind err" << endl;
return 0;
}
if (listen(sockfd, 5) == SOCKET_ERROR)
{
cout << "listen err" << endl;
return 0;
}
while (true)
{
//struct sockaddr_in caddr;
SOCKADDR_IN caddr;
socklen_t len = sizeof(caddr);
int c = accept(sockfd, (SOCKADDR*)&caddr, &len);
if (c == INVALID_SOCKET)
{
continue;
}
cout << "accept c=" << c << endl;
char buff[128] = { 0 };
while (true)
{
if (recv(c, buff, 127, 0) <= 0)
{
break;
}
cout << buff << endl;
send(c, "ok", 2, 0);
}
closesocket(c);
}
}
<2>.客户端
(2).主机为客户端:
<1>.客户端
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <WinSock2.h> //网络头文件
#include <string.h>
#include <ws2tcpip.h> //socklen_t
#include <iostream>
using namespace std;
#pragma comment(lib, "ws2_32.lib") //网络库文件
//初始化网络库
void InitNetwork() {
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(2, 2);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0)
{
return;
}
}
int main()
{
InitNetwork();
SOCKET sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == INVALID_SOCKET)
{
cout << "socket err" << endl;
return 0;
}
struct sockaddr_in saddr;
memset(&saddr, 0, sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons(6000);
saddr.sin_addr.S_un.S_addr = inet_addr("192.168.73.128");
int res = connect(sockfd, (struct sockaddr*)&saddr, sizeof(saddr));
if (res == -1)
{
cout << "connect err" << endl;
closesocket(sockfd);
WSACleanup();
}
while (true)
{
cout << "input" << endl;
char buff[128] = { 0 };
cin >> buff;
if (strncmp(buff, "end", 3) == 0)
{
break;
}
send(sockfd, buff, strlen(buff), 0);
memset(buff, 0, 128);
recv(sockfd, buff, 127, 0);
cout << buff << endl;
}
closesocket(sockfd);
WSACleanup();
return 0;
}
<2>.主机端: