socket编程之 connect()函数

       再讲了服务器端的函数调用之后,终于来到了我们的客户端编程了(read/write之后会详细介绍的),客户端编程相较于服务器端来说是非常简单的了,在掌握了服务器端编程之后再看客户端编程就会胸有成竹(只需要在学一个函数即可)。

在正式开始之前我们还是来回顾一下前面的流程

服务器端:

socket()-->bind( )-->listen()-->accept()-->read()/write()--->close()

socket()//创建套接字
bind()//分配套接字地址
listen()//等待连接请求状态
accept()//允许连接
read()/write()//进行数据交换
close()//断开连接

客户端: 

socket()-->connect()-->read()/write()-->close()

socket()//创建套接字
connect()//请求连接
read()/write()//进行数据交换
close()//断开连接

       相信大家在看到这两张图片应该就会有一点感觉了,现在我们不知道的就只有 connectt() read() write() close()函数了。其实后面的三个用法是差不多的,也很好理解,现在我们只需要把connect()函数掌握,基本上就可以自己写一个服务器端和客户端来进行实时通信了。

那么我们开始吧。

connect(也在三次握手过程中)

#include <sys/types.h> 					
#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

参数:
第一个参数:int sockdf:
		    socket文件描述符
第二个参数: const struct sockaddr *addr:
			传入参数,指定服务器端地址信息,含IP地址和端口号
第三个参数:socklen_t addrlen:
			传入参数,传入sizeof(addr)大小
返回值:
	成功: 0
	失败:-1,设置errno
在之前的bind()函数的博客中我们就详细的讨论了,客户端是可以使用 bind()的,但是没必要.
所以我们才可以说客户端编程是非常简单的事,因为你只需要知道服务器端的IP,端口号就行(当然协议是要一样的。)那么就能完成通信。

当客户端调用 connect()函数之后,发生一下情况之一才会返回(完成函数调用)

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

需要注意的是,所谓的“接收连接”并不意味着服务器调用 accept()函数,。其实是服务器端把连接请求信息记录到等待队列。因此 connect()函数返回后并不进行数据交换。而是要等服务器端 accept 之后才能进行数据交换(read、write)。

客户端端需要调用connect()连接服务器,connect和bind的参数形式一致,区别在于bind的参数是自己的地址,而connect的参数是对方的地址。

这就是客户端的难点所在了。

不过要完整的客户端和服务器端就还要等博主讲到 read、write之后才会给出。敬请期待吧。在这里插入图片描述

  • 28
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值