1. 配git服务器
-
如果linux下安装make等不成功的话,先update
-
windows与linux互相粘贴:
sudo apt-get autoremove open-vm-tools
sudo apt-get install open-vm-tools-desktop
之后重启
- 内容:
linux下配置git服务器并连接到gitee上,windows作为客户端可以与linux下的服务器上传下载文件。
- Linux端安装git
sudo apt install git
git --version
2. Linux端服务器创建新用户管理仓库
cd /home #进入/home/目录
id git #查看git用户是否存在
useradd git #创建git用户
passwd git #为git用户创建密码
(密码Pa$$w0rd)
3. 创建git仓库,并且将管理者变成新建的Git用户,设置仓库的位置(实验中设置为/home/git/repository/gittest.git 为 Git 仓库)
mkdir -p ./git/repository/gittest.git #在git用户目录下创建仓库目录repositroy,并且创建gittest.git项目测试目录
ls #查看/home/目录下有哪些用户目录
cd git #进入git用户目录
ls #查看git用户目录下有哪些目录/文件
cd repository/ #进入repository仓库目录
ls #查看仓库目录下的项目目录
git init --bare ./gittest.git #初始化项目测试目录, 然后把 Git 仓库的 owner 修改为 git
ll #查看gittest.git项目文件夹的拥有者
chown -R git:git repository #将拥有者改为git用户
ll #再次查看gittest.git项目文件夹的拥有者
4. 要在windows上的git clone项目下来的话,需要保证linux上安装了ssh的服务器, 所以在Linux端安装ssh服务器并保证ssh服务器打开。
apt-get install openssh-server
sudo service ssh start
5. windows客户端clone项目
· 客户端winodws下载 Git for Windows,地址:https://git-for-windows.github.io/, 安装完之后,可以使用 Git Bash 作为命令行客户端。可查看 Git 版本
· 打开windows上的git新建一个文件夹来放置git项目,通过服务器的ip可以将git项目复制下来:
cd /d #进入D盘
mkdir gittest #创建gittest文件夹
cd gittest/ #进入gittest文件夹
git clone git@服务器公网IP地址:/home/git/repository/gittest.git #IP地址后面跟冒号,冒号后面是刚才初始化的项目文件夹的绝对路径;查看服务器IP地址:在Ubuntu下ifconfig(查ip显示找不到此命令解决办法https://blog.youkuaiyun.com/sqhren626232/article/details/87707190)。
查linux服务器IP为:192.168.13.180
出现问题,windows不能直接访问linux下的服务器的gittest2.。。。。迷茫
- linux连接到gitee
配置git:
生成RSA密钥对:
ssh-keygen -C ‘邮箱@qq.com’ -t rsa
(为了方便全程回车即可,不用输入ras文件名及密码,#Generating public/private rsa key pair…
#三次回车即可生成 ssh key)
查看公钥内容:
ssh-add ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub
将公钥内容(全部)复制并粘贴(注意:公钥内容以ssh-rsa开头),粘贴地址 https://gitee.com/profile/sshkeys
之后添加公钥完成后进行测试公钥,测试SSH链接
ssh -T git@gitee.com
当终端提示welcome to Gitee.com,yourname!表示链接成功
至此以后只要拷贝ssh链接地址,然后利用git指令即可进行相关操作。
此次我的显示successful。
7. cd到需要上传项目得文件夹下面:
先建立仓库在gitee网站上
在home文件下创建a.txt文件,修改权限,之后
git init
git remote -v
git remote add origin https://gitee.com/qqcom1/socket.git
git pull origin master
git add 【需要上传的文件夹名称】
git commit -m “yyy”
git push origin master
这里提示输入的用户名是邮箱,而不是自己账号的通用用户名,要注意
git push -f 这个命令可以强制推送
删除文件的命令,在root权限下,cd到想删除文件的文件夹下sudo rm -r abc.txt
2. 写客户端服务器通信程序
Linux环境编译运行C语言程序
https://blog.youkuaiyun.com/weixin_44895651/article/details/89309790
gcc xxx.c -o a // 将xxx.c文件编译成a.exe可执行程序,其中a可任意命名
sudo ./a //sudo是获取管理员权限
gcc编译线程程序需带-lpthread选项(否则出错:undefined reference to `pthread_create’) https://blog.youkuaiyun.com/zhangjs0322/article/details/16341775?utm_medium=distribute.pc_relevant.none-task-blog-searchFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-searchFromBaidu-1.control
socket基础
https://chenyu.blog.youkuaiyun.com/article/details/56678997?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
Linux socket编程入门及客户端服务器端通信实现 – 基础篇
https://blog.youkuaiyun.com/gujinjinseu/article/details/27707661
加粗样式client.c
#include <arpa/inet.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#define MAXLINE 4096
int main(int argc, char** argv)
{
int sockfd, n,rec_len;
char recvline[4096], sendline[4096];
char buf[MAXLINE];
struct sockaddr_in servaddr;
if( argc != 2){
printf("usage: ./client <ipaddress>\n");
exit(0);
}
if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){
printf("create socket error: %s(errno: %d)\n", strerror(errno),errno);
exit(0);
}
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(8000);
if( inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0){
printf("inet_pton error for %s\n",argv[1]);
exit(0);
}
if( connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0){
printf("connect error: %s(errno: %d)\n",strerror(errno),errno);
exit(0);
}
printf("send msg to server: \n");
fgets(sendline, 4096, stdin);
if( send(sockfd, sendline, strlen(sendline), 0) < 0)
{
printf("send msg error: %s(errno: %d)\n", strerror(errno), errno);
exit(0);
}
if((rec_len = recv(sockfd, buf, MAXLINE,0)) == -1) {
perror("recv error");
exit(1);
}
buf[rec_len] = '\0';
printf("Received : %s ",buf);
close(sockfd);
exit(0);
}
server.c
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#define DEFAULT_PORT 8000
#define MAXLINE 4096
int main(int argc, char** argv)
{
int socket_fd, connect_fd;
struct sockaddr_in servaddr;
char buff[4096];
int n;
//初始化Socket
if( (socket_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1 ){
printf("create socket error: %s(errno: %d)\n",strerror(errno),errno);
exit(0);
}
//初始化
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//IP地址设置成INADDR_ANY,让系统自动获取本机的IP地址。
servaddr.sin_port = htons(DEFAULT_PORT);//设置的端口为DEFAULT_PORT
//将本地地址绑定到所创建的套接字上
if( bind(socket_fd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1){
printf("bind socket error: %s(errno: %d)\n",strerror(errno),errno);
exit(0);
}
//开始监听是否有客户端连接
if( listen(socket_fd, 10) == -1){
printf("listen socket error: %s(errno: %d)\n",strerror(errno),errno);
exit(0);
}
printf("======waiting for client's request======\n");
while(1){
//阻塞直到有客户端连接,不然多浪费CPU资源。
if( (connect_fd = accept(socket_fd, (struct sockaddr*)NULL, NULL)) == -1){
printf("accept socket error: %s(errno: %d)",strerror(errno),errno);
continue;
}
//接受客户端传过来的数据
n = recv(connect_fd, buff, MAXLINE, 0);
//向客户端发送回应数据
if(!fork()){ /*紫禁城*/
if(send(connect_fd, "Hello,you are connected!\n", 26,0) == -1)
perror("send error");
close(connect_fd);
exit(0);
}
buff[n] = '\0';
printf("recv msg from client: %s\n", buff);
close(connect_fd);
}
close(socket_fd);
}
3. 配路由器
- router虚拟机修改为三块网络适配器
ens33(外网网卡eth0)ens38 ens39
https://blog.youkuaiyun.com/weixin_44377973/article/details/105565047
ubuntu 20.04网卡信息修改
https://blog.frytea.com/archives/435/
在我的ubuntu20.04版本的netplan中配置文件名称为01-network-manager-all.yml,故修改该配置文件
sudo vim /etc/netplan/01-network-manager-all.yaml
第二步,使命令生效即可即可
sudo netplan apply
- 打开router的IP转发功能,默认是关闭的。可用下面命令检查:
more /proc/sys/net/ipv4/ip_forward
如果显示为0,则是关闭的,需要打开,
echo 1>/pro/sys/net/ipv4/ip_forward
为了防止重启配置失效,需要进行如下配置:
vim /etc/sysctl.conf
将其中net.ipv4.ip_forward=1前面的注释去掉。然后运行
sysctl -p
立即生效,或者重启。
- PC1
- pc2
pc1 ping pc2
参考文献https://www.cnblogs.com/awy-blog/p/3348855.html
https://blog.youkuaiyun.com/qc20042/article/details/5910245?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control
4. 写路由器
5. 做软路由
6. ospf实现
· 安装Ubuntu 20.04 (自定义安装)
· 与windows环境互相粘贴:可以使用网上的普遍的两行代码也可以用那个网上的安装vmtools压缩包那个
· 看《OSPF协议完全实现》1,2章,学习进行跑OSPF协议
第二章 OSPF安装
Ubuntu安装三种方式:https://www.cnblogs.com/xwdreamer/p/3623454.html
gcc安装就包括很多c和c++编译库了https://www.linuxidc.com/linux/2019-06/159059.htm
安装libstdc++
https://blog.youkuaiyun.com/u013830021/article/details/51781240
安装make
https://blog.youkuaiyun.com/qq_19734597/article/details/103125602
安装tcl:https://blog.youkuaiyun.com/zsx18273117003/article/details/83374041
移动和复制文件夹到另一个文件夹:https://blog.youkuaiyun.com/ljl1015ljl/article/details/95380668
vim编辑器要安装才能使用:https://www.cnblogs.com/heyangyi/p/8656559.html
解压https://blog.youkuaiyun.com/zad522/article/details/2770446?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control
——编辑运行ospf协议出现的bug——
machdep.h 93行注释掉了
dbage.C
117 error: ‘GetNextAdj’ was not declared in this scope 注释掉了
269 warning: ISO C++ forbids converting a string constant to ‘char*‘ [-Wwrite-strings]问题解决:https://blog.youkuaiyun.com/digitalkee/article/details/107441452
/usr/include/linux/ip.h:86:8: error: redefinition of ‘struct iphdr’
/usr/bin/ld: cannot find -l**** 问题的解决办法:https://blog.youkuaiyun.com/qq_45467083/article/details/108805143(这个不适完全适合我)
https://blog.youkuaiyun.com/qq_39584315/article/details/79724038(比较全面)
遇到can not find tcl
建立软链接,在我的安装得tcl的文件夹下就可,usr/local/lib下sudo ln -s /usr/local/lib/libtcl8.6.10.so /usr/local/lib/libtcl.so