Windows SOCKET编程 2-----(面向连接的通信TCP)---服务端

在IP中,面向连接的通信是通过TCP/IP协议完成的。TCP提供两个计算机可靠无误的数据传输

,应用程序使用TCP通信时,在源计算机和目标计算机之间,会建立起一个虚拟连接,建立

连接之后,计算机之间便能以双向字节流的方式进行数据交换

 

1.0  TCP状态

    对每个套接字来说,它的初始状态都是CLOSED,若客户机初始化了一个连接,就会向服务器

发送一个SYN包,同时将客户机套接字 状态置为SYN_SENT。服务器收到SYN包后,

会发出一个SYN-ACK包,客户机需要通过一个ACK包对它做出响应,此时,客户机的套接字将处于

ESTABLISHED状态,如果服务器一致不发送 SYN-ACK包,客户机就会超时,并返回CLOSED状态

      若服务器的套接字同本地接口及端口绑定起来,并在它上面进行监听,那么套接字的状态便是

LISTEN ,客户机视图与服务器连接时,服务器就会收到一个SYN包,并用一个SYN-ACK包做出回应,

服务器套接字的状态就变成SYN-RCVD ,最后,客户机发出一个ACK包,它将服务器套接字的状态

变为ESTABLISHED

 

 

 

2.1 服务器API函数

这里说的服务器其实是一个进程,它需要等待任意数量的客户机与之建立连接,以便为它们的请求提供服务。

服务器必须在一个已知的名称上监听连接。在TCP/IP中,这个名称就是本地接口的IP地址,再加上一个端口编号

Winsock 中:

第一步, 用Socket 或 WSASocket 将给定协议的套接字绑定到它已知的名称上-------bind()

int bind (

SOCKET s,   //套接字

const struct sockaddr FAR* name,   //地址缓冲区

int namelen        //长度

);

 

//创建流套接字

SOCKET s; 

SOCKADDR_IN tcpaddr;

int port=5150;

s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

//--创建流套接字

 

//建立TCP/IP地址结构

tcpaddr.sin_famliy=AF_INET;

tcpaddr.sin_port=htons(port);

tcpaddr.sin_addr.s_addr=htonl(INADDR_ANY);  //默认的IP接口

//绑定 bind函数的作用只是将套接字和指定的地址关联在一起

bind(s,(SOCKADDR*)&tcpaddr,sizeof(tcpaddr));

 

第二步,将套接字置为监听模式------listen()

指示套接字等待连接传入----listen()

int listen(

SOCKET s,  //被绑定的套接字

int backlog   //指定了被搁置的连接的最大队列长度

)

 

第三步, 若一台客户机试图建立连接,服务器必须通过accept 或 WSAAccept 调用来接受连接

SOCKET accept(

SOCKET s,

struct sockaddr FAR* addr,

int FAR* addrlen

)

 

通过对accept函数的调用,可以对被搁置的连接队列中的第一个连接请求提供服务

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值