无论流式套接字(如TCP)还是数据报(如UDP),均可以使用connect函数。对于流式套接字,使用connect函数后,建立固定地址的连接,之后可以使用send/rev函数进行数据收发。对于数据报,可以不使用connect函数进行连接。此时需要使用sendto/revfrom函数进行收发,且每一次收发都要指明收发地址。也可以像流式套接字那样使用connect函数建立固定连接,然后使用send/rev函数进行收发。此时不需要每次收发都指定地址,但是也意味着只能向一个固定地址收发数据。另外注意,一个connect只能建立一次连接,如果要和其他服务器通信,需要再次创建套接字,重新连接。具体讨论如下:

(1)流式套接字

流式套接字通常使用的是面向连接的协议,如TCP协议。该类型套接字在双方通信之前要先建立连接。具体说就是服务器端创建监听套接字并绑定地址,客户端调用connect函数建立连接。该函数原型如下:

int connect(int sockfd, const struct sockaddr &serv_addr, socklen_t addr_len);

其中,sockfd是客户端创建的流式套接字;serv_addr指向存放服务器地址信息的结构体;addr_len该结构体的长度。

在TCP协议中,客户端与服务器建立连接的过程如下,俗称“三次握手”。

SYN
        客户端 -----------------> 服务器端
                            ACK,SYN
        服务器端 -----------------> 客户端
                            ACK
        客户端 -----------------> 服务器端

一旦建立好连接,客户端就可以通过该套接字和服务器端通信了。需要注意的是,因为是建立好了连接,所以使用send/recv发送/接收数据,无需指定对方
的地址。但一个套接字只能connect一次,如果客户端要和其他的服务器通信的话,必须再创建一个流式套接字,重新连接。

(2)数据报套接字

数据报套接字通常使用的是无连接的协议。该类套接字在双方通信之前不用先建立连接,可以直接使用sendto/recvfrom收发数据。但在发送数据时必须指定对方的地址,在接收数据时通常也需要保存对方的地址。

看到这里大家应该发现了流式套接字数据报套接字的一个区别:前者只能和一方通信,后者可以和多方通信。

数据报套接字同样可以使用connect函数,但含义并不是建立连接而是限定该套接字只和指定的一方通信。即未使用connect之前,可以和任意的地址通信;而connect之后只能和一方通信。

一旦connect之后,数据报套接字也可以使用send/recv收发数据了。如果想和其他的地址通信的话,可以重新connect指定新的地址。

参考文献网址:http://www.embedu.org/Column/Column284.htm

connect函数的用法的更多相关文章

  1. socket编程:客户端与服务器间的连接以及各函数的用法

    在认真的看UNP之前,一直被socket编程说的云里雾里,今天我要让大家从整天上认识socket编程,让我们知道socket编程的整个流程和各个函数的用法.这样:我们在写一些简单的socket编程时就 ...

  2. 很多人以为 connect 和 disconnect 应该像 new 和 delete 一样成对出现 这是错误的(只要 sender 或 receiver 其中之一不存在了,connect 会自动失效。QObject::connect 函数是线程安全的)

    其实我写文章也是边查资料边编辑的 有时候是怕自己的阐述不严谨,有时候是怕自己重复造轮子 就像有些人不停的教大家QLabel QDialog QWidget 个人是不屑的 命令模式 用 Qt's Und ...

  3. 有关日期的函数操作用法总结,to_date(),trunc(),add_months();

    相关知识链接: Oracle trunc()函数的用法 oracle add_months函数 Oracle日期格式转换,tochar(),todate() №2:取得当前日期是一个星期中的第几天,注 ...

  4. Oracle to_date()函数的用法

    Oracle to_date()函数的用法 to_date()是Oracle数据库函数的代表函数之一,下文对Oracle to_date()函数的几种用法作了详细的介绍说明,供您参考学习. 在Orac ...

  5. js中bind、call、apply函数的用法

    最近一直在用 js 写游戏服务器,我也接触 js 时间不长,大学的时候用 js 做过一个 H3C 的 web的项目,然后在腾讯实习的时候用 js 写过一些奇怪的程序,自己也用 js 写过几个的网站.但 ...

  6. Oracle trunc()函数的用法

    Oracle trunc()函数的用法 /**************日期********************/1.select trunc(sysdate) from dual --2013-0 ...

  7. freemarker内置函数和用法

    原文链接:http://www.iteye.com/topic/908500 在我们应用Freemarker 过程中,经常会操作例如字符串,数字,集合等,却不清楚Freemrker 有没有类似于Jav ...

  8. matlab中patch函数的用法

    http://blog.sina.com.cn/s/blog_707b64550100z1nz.html matlab中patch函数的用法——emily (2011-11-18 17:20:33) ...

  9. UDP的connect函数

    UDP的connect没有三次握手过程,内核只是检测是否存在立即可知的错误(如一个显然不可达的目的地), 记录对端的的IP地址和端口号,然后立即返回调用进程. 未连接UDP套接字(unconnecte ...

随机推荐

  1. iOS 之 后台下载,前台显示模式,双 block

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //耗时的操作 NSURL *url ...

  2. Angular - - ngCsp、ngFocus、ngBlur、ngForm

    ngCsp 处理CSP(上下文安全策略)的支持. 当开发如google浏览器的扩展时候这个就必须使用. CSP禁止应用程序使用eval和Function(string)生成的函数.如果我们需要兼容,我 ...

  3. 【python之路12】三元运算符(if)

    1.三元运算符条件语句 普通if条件是这样写的: n = 1 if n > 0: st = '大于0' else: st = '小于等于0' print(st) 三元运算符的写法: n = 1 ...

  4. Java经典案例之-“成绩等级划分”

    /** * 描述:在对话框中输入学习成绩,利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示, * 60分以下的用C表示. * 分析:可以利用三目运算符 ...

  5. Delphi基本图像处理方法汇总

    这篇文章主要介绍了Delphi基本图像处理方法,实例汇总了Delphi操作图像实现浮雕.反色.模糊.翻转等常用效果的方法,非常具有实用价值,需要的朋友可以参考下   本文实例汇总了Delphi基本图像 ...

  6. SecureCRT 使用

    1. 连接linux 服务器 http://www.cnblogs.com/SimonGao/p/4959274.html

  7. Blend4 的安装和配置

    Microsoft Expression Blend作为一款功能齐全的专业设计工具,可用来针对基于 Microsoft Windows 和基于 Microsoft Silverlight 1.0 的应 ...

  8. jQ小图标上下滑动特效

    嗯,又到了,夜静饥寒的时候,手指颤抖,回望去,屋内满是寂静,寥寥绰影,咳咳咳,想我程序员之路还没到终点...就...咳咳咳 好了日常神经结束,还要涂我的唇膏.还剩下,最后一章,js动画(四),明天放上 ...

  9. Spring 集成 Dubbo

    Duboo是什么 DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次 ...

  10. Intellij IDEA 建立文件夹目录问题

    问题: NEW一个package常出现文件夹层次问题 解决: 1.选中当前文件夹(要在该文件夹下添加): 2.右击此处: 3.添加即可. 链接:http://stackoverflow.com/que ...