欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Socket编程简介

程序员文章站 2022-05-04 11:39:00
[TOC] 本文系读书笔记,非深入研究,也无代码,如非所需,请见谅。 哦,这里有份不错的: "Linux的SOCKET编程详解" 背景 花了好久的时间(大约一周,我太垃圾)看完了一篇英文文章:Bee'j Guide to Network Programming "^1]。还有一本书:《TCP/IP ......

目录
本文系读书笔记,非深入研究,也无代码,如非所需,请见谅。

哦,这里有份不错的:linux的socket编程详解


背景

花了好久的时间(大约一周,我太垃圾)看完了一篇英文文章:bee'j guide to network programming。还有一本书:《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个小矮人,最后还晚于事实标准tcp/ip,即便按照iso/osi的来了,还失败了,因为太复杂了。

基础

在tcp/ip中,一层层的抽象封装,下层对上层透明不可见,上层都是下层报文格式的数据部分,报头是一些控制信息。
Socket编程简介
socket编程位于应用层之下、传输层之上。分为了stream socket和datagram socket,其实分别对应了传输层的两种协议,tcp和udp。不过问题就来了,如果是dctcp这种高级玩意是怎么搞得呢?以后再说吧。
还有c/s架构,其实两种架构:p2p以及c/s各有优缺点吧,不过本文只涉及c/s,b/s是c/s的一种特殊情况,p2p我还没有研究过。c/s架构就是类似下图:
Socket编程简介
对了,作者是在*nix平台做的,windows只是提了以下:winsock.h

流程

socket编程的流程其实不复杂。
Socket编程简介
这样整个流程就出来了,就是先创建socket,然后绑定(bind),其实connect()可以代替bind(),不过区别是,bind()绑定端口,而connect不关心使用哪个端口,当然是对传递的参数来说,connect()会帮程序员找一个未绑定端口进行绑定。服务器端监听对这个端口的连接请求,剩下的就是发送、接收数据了,这里注意stream socket(使用tcp连接)和datagram socket(使用udp无连接)的发送和接收使用的函数是不同的。最后不要忘了关闭socket。
Socket编程简介
其实剩下的主要是去看各个函数都需要哪些参数,怎么使用就好了,在文章的倒数第二章给了,不贴了。理论上下面应该给出一个client/server的程序的,但是我觉着没什么必要。顺着我给的连接过去就有很多,不贴了。
不过可以列一下使用了最多的头文件。

#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>

如果有时间,我学艺更精的时候再来补充。

参考


  1. beej's guide to network programming

  2. osi模型究竟忽悠了多少人?