套接字socket

一、socket作用

socket----给应用层和传输层之间提供应用程序设计接口(应用编程接口API)。
在这里插入图片描述在这里插入图片描述

二、地址结构

1.当应用程序创建套接字时,操作系统会分配一个数据结构来存储该套接字相关信息。
2.使用TCP/IP协议族的网络应用程序声明端点地址变量时,使用结构sockaddr_in

struct sockaddr_in
{
	u_char sin_len;		//地址长度
	u_char sin_family;		//地址族
	u_cahr sin_port;		//端口号
	struct in_addr sin_addr;		//IP地址
	char sin_zer0[8];		//未用(置0)
}

三、常用函数

在这里插入图片描述
connect()的参数sd是客户端的套接字,accept的是服务器创建的套接字,调用accept之后会场生成新的套接字(newsocket),此套接字用来和客户端进行通信在这里插入图片描述
1.WSAStartup()
使用socket的应用程序在使用socket之前必须先调用此函数。

  • 参数一:指明程序请求的额WinSock版本,高位字节指明副版本,低位字节指明主版本。如:0x102表示2.1版
  • 参数二:返回实际的WinSock的版本信息(指向WSADATA结构的指针)
    eg:
    wVersionRequested = MAKEWORD(2,1)
    err = WSAStartup(wVersionRequested, &wsData)
    2.WSACleanup()
    完成对Socket库的使用时,解除与Socket库的绑定,释放Socket库所占用的系统资源。
    3.socket()
    创建套接字socket,返回套接字描述符(sd)
    形式:sd = sock(protofamily,type,proto).
  • protofamily = PF_INET(TCP/IP) : 协议族
  • type:套接字类型(SOCK_STREAM,SOCK_DGRAM,SOCK_RAW(TCP/IP) — 流式套接字,数据报套接字,SOCK_RAM)
  • proto:协议号,0为默认
    eg:创建一个流式套接字
struct protoent *p;
p = getprotobyname("tcp");
SOCKET sd = socket(PF_INET,SOCK_STREAM,p->p_proto);

在这里插入图片描述
TCP:可靠、面向连接、字节流传输、点对点
UDP:不可靠、无连接、数据包传输
【可靠:使用TCP传输,可以保证数据不会出错、不会丢失、不会乱序,不会多也不会少。
点对点:一个TCP只能连接两者不能连接第三者】
4.Closesocket()
int closesocket(SOCKET sd);

  • 关闭套接字sd

  • 若是多个进程共享一个套接字,调用此函数将套接字的引用计数减一,减至0才关闭

  • 一个进程的多线程对一个套接字的使用无须计数,因为当进程中的一个线程调用closesocket将一个套接字关闭时,该进程的其他线程也将不能访问该套接字。

  • 返回值
    0:成功;SOCKET_ERROR:失败
    5.bind()
    int bind(sd,localaddr,addrlen);

  • 绑定该套接字的本地端点地址:IP地址+端口号

  • 参数:
    sd:套接字描述符
    localaddr:端点地址(结构sockaddr_in)

  • 客户端一般不必调用bind函数,系统会帮忙调用。
    【地址通配符:INADDR_ANY】

四、SOCKET API函数小结

在这里插入图片描述在这里插入图片描述

五、调用socket api函数过程(TCP)

在这里插入图片描述
S:closesocket(ns).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值