网络编程笔记

1. 网络数据传输时需要考虑字节序问题,即大端小端问题:

x86系列CPU都是little-endian的字节序.

网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用big endian排序方式。

为了进行转换 bsd socket提供了转换的函数 有下面四个

htons 把unsigned short类型从主机序转换到网络序

htonl 把unsigned long类型从主机序转换到网络序

ntohs 把unsigned short类型从网络序转换到主机序

ntohl 把unsigned long类型从网络序转换到主机序

在使用little endian的系统中 这些函数会把字节序进行转换。

在发送数据之前将主机序转换为网络序,在接收到数据后需要将网络序转换为主机序。

2. 设置路由器虚拟服务器实现外网向内网发送数据包

外网向内网发送的数据包目的IP为路由器IP,路由器根据数据包的目的端口将数据包转发给内网主机。

3.内网和外网通讯

内网先向外网独立IP发送一个TCP报文,路由器会在此时自动建立一个NAT映射,将内网IP和端口号同WAN口IP和端口号对应并缓存,缓存更新时间貌似是50s。其后外网独立IP向内网发报文时,目的IP采用内网所在的路由器WAN口IP,端口还是路由器的映射端口,就可以通信了。

UDP试了,不行。

时间: 2024-10-29 03:56:38

网络编程笔记的相关文章

linux网络编程笔记——TCP

1.TCP和UDP TCP是长连接像持续的打电话,UDP是短消息更像是发短信.TCP需要消耗相对较多的资源,但是传输质量有保障,UDP本身是不会考虑传输质量的问题. 2.网络传输内容 我习惯的做法是直接通过TCP传送结构体,当然前提是收发两端都在程序里对目标结构体有充分的定义.特别说明的一点是,要小心收发两端处理器的大小端问题!而且传输信息头里必须包含长度信息,而且通用的是大端.但是,这里的长度和结构体,我选择用小端进行传输. 3.TCPserver实现 参考了别人多线程的回调写法,看起来不错.

linux网络编程笔记——UDP

目前这部分代码会出现阻塞问题,暂时尚未解决 #include "udp.h" #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <malloc.h> #include <sys/types.h> #include <sys/socket

Winsock网络编程笔记(4)----基本的理论知识

前面的笔记记录了Winsock的入门编程,领略了Winsock编程的乐趣..但这并不能算是掌握了Winsock,加深理论知识的理解才会让后续学习更加得心应手..因此,这篇笔记将记录一些有关Winsock的基本理论知识,由于是一篇笔记,鉴于看书速度有限,主要内容会慢慢地填入..错误在所难免的,希望看客更正..(*^__^*) 嘻嘻…… Winsock网络编程笔记(4)----基本的理论知识,布布扣,bubuko.com

Java网络编程笔记5

在Java网络编程笔记4中我们看到了客户端与服务器通信的过程,只是在前面的程序只是单个客户端与服务器通信 的例子. 接下来我们看如何实现多个客户端与服务器通信,对于服务器来说,它要为每个客户端请求的Socket建立一个线程,并通过它进行通信. 在这里创建一个线程类用来管理Socket: <span style="font-size:18px;">public class ServerThread extends Thread { private Socket socket;

Winsock网络编程笔记(3)----基于UDP的server和client

在上一篇随笔中,对Winsock中基于tcp面向连接的Server和Client通信进行了说明,但是,Winsock中,Server和Client间还可以通过无连接通信,也就是采用UDP协议.. 因此,这一篇随笔也简单的列举基于UDP的Server和Client的实现.. 和基于TCP的实现相比,其主要的不同点包括: ①接收端(简单地说就是服务器)/发送端(简单地说就是客户端)在创建Socket时候,参数要选择SOCK_DGRAM, IPPROTO_UDP: ②接收端不需要调用listen和ac

Winsock 网络编程笔记(1)----入门

今天第一次接触winsock网络编程,看的资料是Windows网络编程第二版.通过博客记住自己的看书笔记.. 在这里贴出第一个程序,虽然程序什么都没做,但以此作为入门,熟悉其网络编程风格.. 1 #include"winsock2.h" 2 #include<iostream> 3 using namespace std; 4 //This line is very important 5 6 #pragma comment(lib,"ws2_32.lib&quo

Go 网络编程笔记

前言: 本文是学习<<go语言程序设计>> -- 清华大学出版社(王鹏 编著) 的2014年1月第一版 做的一些笔记 , 如有侵权, 请告知笔者, 将在24小时内删除, 转载请注明出处! 1. 标准库中提供net包, 支持基于网络层(IP),传输层(TCP/UDP) 以及应用层(如HTTP,FTP,SMTP) 的网络通信. 2. IP 地址和域名解析 - IP地址类型:  type IP[] byte - 常用函数 -  func ParseIP(s string) IP  验证I

UNIX网络编程笔记(1)—传输层协议

开始学习网络编程的经典<UNIX网络编程>(第3版)作为研究生阶段的副本练习吧,厚厚一本书,希望能坚持看下去,坚持做些笔记. 1.TCP/IP协议概述 IPv4 网际协议版本4(Internet Protocol version 4),32位地址,为TCP.UDP.SCTP.ICMP和IGMP提供分组递送服务. IPv6 网际协议版本6(Internet Protocol version 6).128位地址,为TCP.UDP.SCTP和ICMPv6提供分组递送服务. TCP 传输控制协议(Tr

iOS网络编程笔记——Socket编程

一.什么是Socket通信: Socket是网络上的两个程序,通过一个双向的通信连接,实现数据的交换.这个双向连路的一端称为socket.socket通常用来实现客户方和服务方的连接.socket是TCP/IP协议的一个十分流行的编程接口.一个socket由一个IP地址和一个端口号唯一确定.TCP/IP协议的传输层又有两种协议:TCP(传输控制协议)和UDP(用户数据报协议).TCP是基于连接的,而UDP是无连接的:TCP对系统资源的要求较多,而UDP少:TCP保证数据的正确性而UDP可能丢包:

Java网络编程笔记4

Socket和ServerSocket,网络编程可以分为创建Socket.打开连接Socket的输入流和输出流,对Socket进行编程,关闭Socket. 创建Socket 一个功能齐全的Socket的工作过程包含以下四个步骤: 1.创建Socket. 2.打开连接到Socket的输入/输出流. 3.按照一定的协议对Socket进行读/写操作. 4.关闭Socket 在java.net包中,定义了Socket和ServerSocket两个类,类Socket表示客户端或者服务器Socket连接的两