Socket编程简介
本文系读书笔记,非深入研究,也无代码,如非所需,请见谅。
哦,这里有份不错的:Linux的SOCKET编程详解
背景
花了好久的时间(大约一周,我太垃圾)看完了一篇英文文章:Bee'j Guide to Network Programming[1]。还有一本书:《TCP/IP Sockets in C - Practical Guide for Programmers》以及一份PPT:《Introduction to Sockets Programming in C using TCP/IP》,不过后二者没有看完就是了,也比较老,毕竟我要用的是IPv6,而非IPv4。【更新,现在说的那本书有了第二版,加入了IPv6的内容,中文翻译:TCP/IP Sockets编程(C语言实现)】
其实本科已经学过网络的书,网络最重要的不是ISO/OSI,而是TCP/IP,毕竟据老师所说,ISO/OSI是一群人喝醉酒想出来的,分别对应了7个小矮人[2],最后还晚于事实标准TCP/IP,即便按照ISO/OSI的来了,还失败了,因为太复杂了。
基础
在TCP/IP中,一层层的抽象封装,下层对上层透明不可见,上层都是下层报文格式的数据部分,报头是一些控制信息。
Socket编程位于应用层之下、传输层之上。分为了Stream Socket和Datagram Socket,其实分别对应了传输层的两种协议,TCP和UDP。不过问题就来了,如果是DCTCP这种高级玩意是怎么搞得呢?以后再说吧。
还有C/S架构,其实两种架构:P2P以及C/S各有优缺点吧,不过本文只涉及C/S,B/S是C/S的一种特殊情况,P2P我还没有研究过。C/S架构就是类似下图:
对了,作者是在*nix平台做的,Windows只是提了以下:Winsock.h
流程
Socket编程的流程其实不复杂。
这样整个流程就出来了,就是先创建Socket,然后绑定(bind),其实connect()可以代替bind(),不过区别是,bind()绑定端口,而connect不关心使用哪个端口,当然是对传递的参数来说,connect()会帮程序员找一个未绑定端口进行绑定。服务器端监听对这个端口的连接请求,剩下的就是发送、接收数据了,这里注意Stream Socket(使用TCP连接)和Datagram Socket(使用UDP无连接)的发送和接收使用的函数是不同的。最后不要忘了关闭Socket。
其实剩下的主要是去看各个函数都需要哪些参数,怎么使用就好了,在文章的倒数第二章给了man pages,不贴了。理论上下面应该给出一个Client/Server的程序的,但是我觉着没什么必要。顺着我给的连接[1:1]过去就有很多,不贴了。
不过可以列一下使用了最多的头文件。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
如果有时间,我学艺更精的时候再来补充。
参考
最新文章
- 规则“Windows Server 2003 FILESTREAM 修补程序检查” 失败。
- Redis 安装与简单示例 01_转
- 【转】iOS 开发之协议protocal-代理传值delegate
- ~/.ctag的作用与配置
- 关于Git中的一些常用的命令
- 排序算法(冒泡,选择,快速)Java 实现
- poj3693 Maximum repetition substring
- python视频教程大全集下载
- latex 模版
- Sql Server专题一:索引(中)
- 在SQLAlter在现场一定的价值
- 华为olt ma5680t常用命令详解
- DB9针和DB25针串口的引脚定义
- Maven自动部署jar包到Neuxs
- 玩转spring boot——负载均衡与session共享
- yum 安装 jenkins
- Table of Contents
- Android使用DrawerLayout仿qq6.6版本侧滑效果
- 1.spark的wordcount解析
- 习惯养成和目标追踪APP推荐
热门文章
- spring整合ehcache实现缓存
- 使用pandas,numpy进行数据分析建模的一些常用命令
- 为啥java要使用 set ()和get()方法---封装
- zookeeper 客户端连接报: Will not attempt to authenticate using SASL
- ActiveMQ此例简单介绍基于docker的activemq安装与集群搭建
- 蚂蚁金服招聘-无线测试开发(20k-36k/月)
- ndk-stack使用方法(转)
- 分析Android中View的工作流程
- Errors running builder JavaScript Validator
- u-boot的环境变量详解