恋恋风辰的个人博客


  • Home

  • Archives

  • Categories

  • Tags

  • Search

Udp打洞原理和源代码。

Posted on 2017-08-04 | In 网络编程

所谓udp打洞就是指客户端A通过udp协议向服务器发送数据包,服务器收到后,获取数据包,并且可获取客户端A地址和端口号。同样在客户端B发送给服务器udp数据包后,服务器同样在收到B发送过来的数据包后获取B的地址和端口号,将A和B的地址与端口号分别发送给对方,这样双方可以继续用UDP协议通信。这么做有什么用呢?因为对于一些应用或者需求,需要两个客户端临时做一些通信,而这种通信不需要建立tcp就可以完成,所以才去udp打洞。

下面附上测试代码:

头文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// udphole.cpp : 定义控制台应用程序的入口点。

#ifdef WIN32
#include "stdafx.h"
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib, "Ws2_32.lib")
typedef SOCKET socketfd;
typedef SOCKADDR_IN sockaddr_in;
#endif

#ifdef __linux__

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <time.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#include <iostream>
#include <errno.h>
#include <arpa/inet.h>
#include <pthread.h>

typedef int socketfd;
#endif
#include <list>
#include <map>
#include <iostream>
using namespace std;
Read more »

网络编程学习方法和图书推荐

Posted on 2017-08-04 | In 网络编程

从事网络编程有五年多了,写过自己的Server,读过大部分网络库libevent,redis,muduo等等,市面上的网络用书大多读过,给新人一些建议,主要是从事服务器网络编程后端的同学。如果你没写过网络编程的代码,也没有这方面的知识,那么该如何下手呢?这个时候不需要盲目看书,先培养一下自己的兴趣,了解TCP如何建立连接,TCP三次握手和四次握手的过程,

Read more »

redis 配置和使用(C++)

Posted on 2017-08-04 | In 网络编程

一、Redis简介:

Redis为非关系型数据库,Redis是一个Key-Value存储系统。它支持存储的value类型有:string(字符串),list(链表), set(无序集合),zset(sorted set有序集合)和hash,Redis支持各种不同方式的排序。数据都是缓存在内存中的,它也可以周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并实现了master-slave(主从)同步。

二、Redis安装和使用:

Redis下载地址,我下载的为最新版本:

wget [http://download.redis.io/releases/redis-3.2.8.tar.gz](wget http://download.redis.io/releases/redis-3.2.8.tar.gz)

解压安装:

1
2
3
$ tar xzf redis-3.2.8.tar.gz
$ cd redis-3.2.8
$ make

make完后 redis-3.2.8目录下会出现redis-server和redis-cli
下面在src目录下启动redis服务.

1
$./redis-server
Read more »

大并发服务器框架设计

Posted on 2017-08-04 | In 网络编程

简单谈一谈大并发服务器框架设计的基本思路
基本的服务器框架都是C/S结构的,请求和相应流程是这样的:

Read more »

TCP/IP地址格式转换API

Posted on 2017-08-04 | In 网络编程

1、htonl ()和ntohl( )

ntohl( )—–网络顺序转换成主机顺序(长整型)

u_long PASCAL FAR ntohl (u_long netlong);

htonl ()—–主机顺序转换成网络顺序 (长整型)

u_long PASCAL FAR htonl (u_long hostlong);

Read more »

柔性数组探索和应用

Posted on 2017-08-04 | In C++

redis字符串可以实现通过地址偏移找到所在结构体的首地址,struct sdshdr *sh = (void *)(s - (sizeof(struct sdshdr)))
1
也就是通过buf地址可以找到sdshdr的地址,这个我一直不理解,写了代码测试下

Read more »

弱点针对训练(函数指针)

Posted on 2017-08-04 | In C++

想着把每一个基础的知识点搞清,趁着早晨凉快就先写一些总结
函数指针,基本结构是 函数返回类型(* 函数指针名字)(函数参数1,函数参数2,...);
这种指针用于指向一个函数的地址,可以通过函数指针回调同类型的不同函数,实现类似于事件回调机制的功能。
先写一个简单的测试程序
1

Read more »

stringstream使用方法

Posted on 2017-08-04 | In C++

C++ 有stringstream这个工具可以方便的进行数据类型的转换

使用时包含

#include <sstream.h>

using namespace std;

当需要将一个整形的数转换为字符串

1
2
3
4
5
6
7
8
9
stringstream mystream;

int a = 100;

mystream << a;

std::string numstr;

mystream >> mumstr;
Read more »

大根堆的原理与实现。

Posted on 2017-08-04 | In 数据结构和算法

大根堆的定义:

1 大根堆是一个大根树
2 大根堆是一个完全二叉树
所以大根堆用数组表示是连续的,不会出现空白字段。

对于大根堆的插入

1
对于大根堆的插入,可以在排序前确定大根堆的形状,可以确定元素5从位置6插入,那么比较元素5和位置3的元素2,

元素5比元素2大,将2下移。接着比较元素5和元素20,一次类推,直到找到元素5的合理位置。

接着看一下如果插入的元素是21,怎么进行排序。

Read more »

C++模板类注意事项

Posted on 2017-08-04 | In C++

最近使用C++模板,虽然工作几年了,但是模板用的很少,确切的说自己实现的机会很小。

昨天写了一个代码maxheap.h 中实现了类模板的声明,我将实现写在maxheap.cpp中,

当在main.cpp中引用maxheap中的接口时,提示链接错误。网上提供了几个解决方案,

第一种方式是将maxheap.h和maxheap.cpp包含在某个.h文件中,这样在main函数中

包含这个.h即可。第二种方式叫分离模式,我没看,觉得没必要搞得那么复杂。第三种方式

是我最看好的方式,就是将模板类的实现也放在.h中。C++ stl模板就是在.h中实现的。

Read more »
<1…353637>

370 posts
17 categories
21 tags
RSS
GitHub ZhiHu
© 2025 恋恋风辰 本站总访问量次 | 本站访客数人
Powered by Hexo
|
Theme — NexT.Muse v5.1.3