TCP/IP编程 - 1) 基础知识
1. What Is a Socket?(什么是套接字)
A socket is an abstraction through which an application may send and receive data, in much
the same way as an open-file handle allows an application to read and write data to stable
storage.
简单来说,套接字就是网络数据传输用的软件设备。
举个生活中的例子:
我们把插头插到插座上就能从电网获得电力供应,同样道理,为了与远程计算机
进行数据通信,需要连接到Internet,而套接字就是用来连接网络的工具。
A socket allows an application to plug in to the network and communicate with other
applications that are plugged in to the same network. Information written to the socket by
an application on one machine can be read by an application on a different machine and vice
versa.
TCPIP套接字网络原理图:

2. 套接字网络编程的步骤
a. 服务端
step1: 调用socket函数创建套接字
step2: 调用bind函数分配IP地址和端口号
step3: 调用listen函数转为可接收请求状态
step4: 调用accept函数受理连接请求
b. 客户端
step1: 调用socket函数创建套接字
step2: 调用connect函数向服务端发送连接请求
3. 各函数介绍
1) socket()函数
#include <sys/types.h>
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
这个函数建立一个协议族为domain,协议类型为type,协议编号为protocol的
套接字文件描述符。
domain: 协议族, 通常为AF_NET(TCPIP协议族), 以太网使用PF_INET
type: 通信类型
SOCK_STREAM(流式套接字)
SOCK_DGRAM(数据包套接字)
protocol: 协议的特定类型,通常为0
2) bind()函数
#include <sys/types.h>
#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen);
这个函数将长度为addrlen的sockaddr结构类型参数my_addr和sockfd绑定在一起
3. listen()函数
这个函数用来监听端口
#include <sys/socket.h>
int listen(int sockfd, int backlog);
4. accept()函数
#include <sys/types.h>
#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
通过accept()函数可以得到成功连接客户端的IP地址,端口和协议族等信息,这个信息是通过
参数addr获得的。
5. connect()函数 - 客户端
#include <sys/types.h>
#include <sys/socket.h>
int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);
这个函数用来连接网络目标服务器。
其中,参数ser_addr结构包含了需要连接的目的服务器的端口和IP地址,以及协议类型。
TCP/IP编程 - 1) 基础知识的更多相关文章
- TCP/IP网络协议基础知识集锦[转]
引言 本篇属于TCP/IP协议的基础知识,重点介绍了TCP/IP协议簇的内容.作用以及TCP.UDP.IP三种常见网络协议相关的基础知识. 内容 TCP/IP协议簇是由OSI七层模型发展而来的,之所以 ...
- 图解TCP/IP笔记-网络基础知识
1.计算机网络发展的7个阶段1)批处理服务器一次只能处理一批程序指令2)分时服务器可以分时为多台客户端服务3)计算机之间通信计算机之间由通信线路连接,互相通信4)计算机网络的产生通过分组交换技术,在不 ...
- python六十七课——网络编程(基础知识了解)
网络编程: 什么是网络编程? 网络:它是一种隐形的媒介:可以将多台计算机使用(将它们连接到一起) 网络编程:将多台计算机之间可以相互通信了(做数据交互) 一旦涉及到网络编程,划分为两个方向存在,一方我 ...
- java第九节 网络编程的基础知识
/** * * 网络编程的基础知识 * 网络协议与TCP/IP * IP地址和Port(端口号) * 本地回路的IP地址:127.0.0.1 * 端口号的范围为0-65535之间,0-1023之间的端 ...
- Linux学习(1)- TCP/IP网络协议基础
Linux学习(1)- TCP/IP网络协议基础 一.TCP/IP 简介 学习内容 TCP/IP(Transmission Control Protocol/Internet Protocol)是传输 ...
- linux tcp/ip编程和windows tcp/ip编程差别以及windows socket编程详解
最近要涉及对接现有应用visual c++开发的tcp客户端,花时间了解了下windows下tcp开发和linux的差别,从开发的角度而言,最大的差别是头文件(早期为了推广尽可能兼容,后面越来越扩展, ...
- C#复习笔记(5)--C#5:简化的异步编程(异步编程的基础知识)
异步编程的基础知识 C#5推出的async和await关键字使异步编程从表面上来说变得简单了许多,我们只需要了解不多的知识就可以编写出有效的异步代码. 在介绍async和await之前,先介绍一些基础 ...
- 编程必备基础知识|计算机组成原理篇(09):CPU的控制器和运算器
计算机基础方面的知识,对于一些非科班出身的同学来讲,一直是他们心中的痛,而对于科班出身的同学,很多同学在工作之后,也意识到自身所学知识的不足与欠缺,想回头补补基础知识.关于计算机基础的课程很多,内容繁 ...
- 01网络编程(基础知识+OSI七层协议+TCP与UDP)
目录 01 网络编程 一.软件开发架构 1.1 CS架构 1.2 BS架构 二.网络理论前戏 2.1 简介 2.2 常见硬件 三.OSI七层协议(五层) 3.1 七层协议 3.2 五层协议 3.3 知 ...
随机推荐
- 2017/11/21 Leetcode 日记
2017/11/21 Leetcode 日记 496. Next Greater Element I You are given two arrays (without duplicates) num ...
- HDU 5952 [DFS]
题目链接:[http://acm.hdu.edu.cn/showproblem.php?pid=5952] 题意:给出一张无向图,然后判断这张图中一共有多少个不同的大小为S的完全图,并且保证每个点的度 ...
- 【BZOJ 3482】 3482: [COCI2013]hiperprostor (dij+凸包)
3482: [COCI2013]hiperprostor Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 277 Solved: 81 Descrip ...
- java 软引用,弱引用,强引用
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 强引用 ,有用的对象. 强引用 不会被回收. 软引用,有用 但不是必须的对象. 系统在发 ...
- 「2017 山东一轮集训 Day4」基因
设置 \(\sqrt{n}\) 个关键点,维护出关键点到每个右端点之间的答案以及Pam的左指针,每次暴力向左插入元素即可,为了去重,还需要记录一下Pam上每个节点在每个关键点为左端点插入到时候到最左边 ...
- 【容斥原理】【推导】【树状数组】Gym - 101485G - Guessing Camels
题意:给你三个1~n的排列a,b,c,问你在 (i,j)(1<=i<=n,1<=j<=n,i≠j),有多少个有序实数对(i,j)满足在三个排列中,i都在j的前面. 暴力求的话是 ...
- HDFS API基本操作
对HDFS API基本操作都是通过 org.apache.hadoop.fs.FileSystem类进行的,以下是一些常见的操作: package HdfsAPI; import java.io.Bu ...
- CMOS DACs act as digitally controlled voltage dividers
Digital potentiometers, such as Analog Devices’ AD5160, make excellent digitally controlled voltage ...
- Unused port adds a PWM/analog channel to a microcontroller
Low-cost, 8-bit, single-chip microcontrollers are stingy when it comes to on-chip PWM (pulse-width-m ...
- cocos2d-x_lua中tolua++绑定c++分享
cocos2d-x_lua中tolua++绑定c++分享 我用的版本号是cocos2d-x 2.x的版本号 下面操作为了保证不更改引擎的一个类LuaCocos2d.cpp 1.操作前 能够 ...