Linux网络编程(七)-TCP协议客户端及代码实现

1.TCP的客户端代码流程简述

这一章将为大家讲解Socket通信中客户端的实现过程,还是先上图,请大家了解客户端的步骤

可以看到,相比服务端,客户端的步骤简单的很多。事实上这种情况比较多,比如一个服务端会有多个客户端连接。

通过图片我们可以看到TCP客务端调用的函数依次是socket( )、connect( )、recv( )、send( )、closessocket( )

由于在服务端这章的讲解中我们提到了socket()、recv()、send()、closesocket()、WSAStartup()、WSACleanup()的函数,在客户端中同样需要这些函数,使用方式是一样的,因此这里不再赘述。

大家学习前面的函数后可直接在客户端中实现。

 2.Socket编程之connect函数

这一节我们讲connect连接,这一步位于客户端的第二步,调用connect阻塞客户程序,传输层实体开始建立连接,当连接建立完成时,取消阻塞;

函数功能:

向服务端发起连接请求

头文件:

#include <winsock2.h>

函数原型:

int connect(int sockcd, const struct sockaddr *addr, int addrlen);

返回值类型:

整型

返回值:

成功返回0,失败返回-1。当客户端调用 connect()函数之后,发生以下情况之一才会返回(完成函数调用)

  1. 服务器端接收连接请求
  2. 发生断网的异常情况而终端连接请求

参数说明:

sockcd为客户端建立socket函数的返回值。

addr是一个sockaddr结构的指针,用于指定所要连接的服务器的地址(服务端的IP地址和端口号,要和服务端的实际IP地址以及绑定的端口一致才可以)。

addrlen为addr变量的大小,可由 sizeof()计算得出。

调用connect函数整体代码的实现:

accept()函数,其实是服务器端把连接请求信息记录到等待队列。因此connect()函数返回后并不进行数据交换。而是要等服务器端 accept 之后才能进行数据交换。、

这一步调用完成之后,就和服务端建立了通信,就可以使用send或recv相互发送和接收消息了

connect(sockcd,(sockaddr*)&seraddr,sizeof(seraddr));//需要注意的是,所谓的“接收连接”并不意味着服务器调用

3.Socket客户端完整参考代码

 本代码用于和第二章服务端代码一致,监听12345端口,可以不断的发送消息,直至输入"quit"退出程序,完整参考代码如下:

#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
 
int main()
{
    int err;
    char SendBuf[100];
    WORD versionRequired;
    WSADATA wsaData;
    versionRequired=MAKEWORD(2,2);
    err=WSAStartup(versionRequired,&w
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dola_Pan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值