socket网络通信

本文介绍了套接字通信的基本流程,涉及网络字节序、sockaddr数据结构、IP地址转换函数以及关键的socket编程函数如socket、bind、listen、accept和connect。还提到了Windows下的WSAStartup初始化,以及流套接字(TCP)、数据报套接字(UDP)和原始套接字的不同特性。此外,讨论了计算机名、IP设置和端口在AF_INET中的作用。
摘要由CSDN通过智能技术生成

奇牛

2.1套接字

socket通信创建流程图

2.2socket编程基础

2.2.1 网络字节序

大端字节序:低地址高字节,高地址低字节

小端字节序:低地址低字节,高地址高字节

 2.2.2 sockaddr数据结构

2.2.3 IP地址转换函数

IP字节序的地址转换为网络字节序的地址

从网络字节序转换为主机字节序

 把网络字节序的IP转换为字符串类型的IP

2.3 socket编程函数

2.3.1 socket函数

 2.3.2 bind函数

2.3.3 listen函数

2.3.4 accept函数

2.3.5 connect函数

2.3.6 出错处理函数

 

 出错处理可以包装到一个函数里

这样代码就可以替换成

第二种方法,这种方法无法把错误信息输出到日志中

 

吕鑫

1、WSAStartup:初始化 类似于mysql_init

2、创建socket句柄
int socket(int af, int type, int protocol);
af:代表地址家族,The address family specification。

#define SOCK_STREAM     1               /* TCP:stream socket */
#define SOCK_DGRAM      2               /*UDP datagram socket */
#define SOCK_RAW        3               /* raw-protocol interface */

3、把句柄绑定一个端口:开口子
bind(

4、sendto/recv(recvfrom)

socket种类

1.流套接字(SOCK_STREAM)
流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议 [3] 。
2.数据报套接字(SOCK_DGRAM)
数据报套接字提供一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据报套接字使用UDP( User DatagramProtocol)协议进行数据的传输。由于数据报套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理 [3] 。

3.原始套接字(SOCK_RAW)
原始套接字与标准套接字(标准套接字指的是前面介绍的流套接字和数据报套接字)的区别在于:原始套接字可以读写内核没有处理的IP数据包,而流套接字只能读取TCP协议的数据,数据报套接字只能读取UDP协议的数据。因此,如果要访问其他协议发送的数据必须使用原始套接 [3] 。

基础知识

1、电脑名称与IP设置:计算机名和IP地址都是不能重复(unique)
a)如果电脑设置了计算机机名(host-name),在电脑启动时会在整个局域网内统一管理登记;
b)而且每一台电脑的名称必须(unique)不重复,这些计算机名称就是在网络交换机(路由器)中管理;
c)另外还有计算机的IP也不能冲突(unique),所以IP设置中有些是自动获取IP保证不冲突(由交换机分配IP)。


2、IP和PORT是AF_INET必备条件:
a)IP是每台电脑的编号(4段或6段),一个电脑可以设置多个IP(参见WindowsIP设置)
b)但是两台电脑不可以公用一个IP地址,如果两台电脑电脑设置IP冲突,先开机的占用;
c)PORT是同一台电脑内的接货发货的码头,是软件收发数据的出入口(软件进程要占用的码头);
d)也是遵循不冲突的规则,及时相同的软件启动两份进程,也不能占用端口冲突(不能串线)

3、SOCKET简介:
a)早期网络通讯,需要程序员直接判断网卡型号,通过汇编调用网卡针脚电平操作;
b)后来人们把网卡的类型和驱动交给操作系统,安装系统时安装网卡的驱动;
c)开发者不再关注网卡的信息和驱动,操作系统提供统一网络发送接口,这东西就是SOCKET接口;

用于在两个的应用程序之间相互通信(包括两台以上主机之间的程序),socket是属于TCP\IP的上一层。

3、 address family :
a)在通过驱动开发网络程序的初期,涌现出各种通讯模式,包括AF_INET(基于IP地址的)还有IPX等。
b)如果选用AF_INET模式通讯,包含TCP(SOCK_STREAM)和UDP(SOCK_DGRAM)两种子分支。
c)DATA-GRAM模式叫做数据报文模式,SOCK_STREAM叫做数据流模式,SOCK_RAW做抓包用的;


附录:Windows数据类型:

typedef unsigned long       DWORD;
typedef int                            BOOL;
typedef unsigned char       BYTE;
typedef unsigned short      WORD;
typedef float               FLOAT;
typedef FLOAT               *PFLOAT;
typedef BOOL near           *PBOOL;
typedef BOOL far            *LPBOOL;
typedef BYTE near           *PBYTE;
typedef BYTE far            *LPBYTE;
typedef int near            *PINT;
typedef int far             *LPINT;
typedef WORD near           *PWORD;
typedef WORD far            *LPWORD;
typedef long far            *LPLONG;
typedef DWORD near          *PDWORD;
typedef DWORD far           *LPDWORD;
typedef void far            *LPVOID;
typedef CONST void far      *LPCVOID;

typedef int                 INT;
typedef unsigned int        UINT;
typedef unsigned int        *PUINT;
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值