connect函数的用法
无论流式套接字(如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函数的用法的更多相关文章
- socket编程:客户端与服务器间的连接以及各函数的用法
在认真的看UNP之前,一直被socket编程说的云里雾里,今天我要让大家从整天上认识socket编程,让我们知道socket编程的整个流程和各个函数的用法.这样:我们在写一些简单的socket编程时就 ...
- 很多人以为 connect 和 disconnect 应该像 new 和 delete 一样成对出现 这是错误的(只要 sender 或 receiver 其中之一不存在了,connect 会自动失效。QObject::connect 函数是线程安全的)
其实我写文章也是边查资料边编辑的 有时候是怕自己的阐述不严谨,有时候是怕自己重复造轮子 就像有些人不停的教大家QLabel QDialog QWidget 个人是不屑的 命令模式 用 Qt's Und ...
- 有关日期的函数操作用法总结,to_date(),trunc(),add_months();
相关知识链接: Oracle trunc()函数的用法 oracle add_months函数 Oracle日期格式转换,tochar(),todate() №2:取得当前日期是一个星期中的第几天,注 ...
- Oracle to_date()函数的用法
Oracle to_date()函数的用法 to_date()是Oracle数据库函数的代表函数之一,下文对Oracle to_date()函数的几种用法作了详细的介绍说明,供您参考学习. 在Orac ...
- js中bind、call、apply函数的用法
最近一直在用 js 写游戏服务器,我也接触 js 时间不长,大学的时候用 js 做过一个 H3C 的 web的项目,然后在腾讯实习的时候用 js 写过一些奇怪的程序,自己也用 js 写过几个的网站.但 ...
- Oracle trunc()函数的用法
Oracle trunc()函数的用法 /**************日期********************/1.select trunc(sysdate) from dual --2013-0 ...
- freemarker内置函数和用法
原文链接:http://www.iteye.com/topic/908500 在我们应用Freemarker 过程中,经常会操作例如字符串,数字,集合等,却不清楚Freemrker 有没有类似于Jav ...
- matlab中patch函数的用法
http://blog.sina.com.cn/s/blog_707b64550100z1nz.html matlab中patch函数的用法——emily (2011-11-18 17:20:33) ...
- UDP的connect函数
UDP的connect没有三次握手过程,内核只是检测是否存在立即可知的错误(如一个显然不可达的目的地), 记录对端的的IP地址和端口号,然后立即返回调用进程. 未连接UDP套接字(unconnecte ...
随机推荐
- iOS 之 后台下载,前台显示模式,双 block
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //耗时的操作 NSURL *url ...
- Angular - - ngCsp、ngFocus、ngBlur、ngForm
ngCsp 处理CSP(上下文安全策略)的支持. 当开发如google浏览器的扩展时候这个就必须使用. CSP禁止应用程序使用eval和Function(string)生成的函数.如果我们需要兼容,我 ...
- 【python之路12】三元运算符(if)
1.三元运算符条件语句 普通if条件是这样写的: n = 1 if n > 0: st = '大于0' else: st = '小于等于0' print(st) 三元运算符的写法: n = 1 ...
- Java经典案例之-“成绩等级划分”
/** * 描述:在对话框中输入学习成绩,利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示, * 60分以下的用C表示. * 分析:可以利用三目运算符 ...
- Delphi基本图像处理方法汇总
这篇文章主要介绍了Delphi基本图像处理方法,实例汇总了Delphi操作图像实现浮雕.反色.模糊.翻转等常用效果的方法,非常具有实用价值,需要的朋友可以参考下 本文实例汇总了Delphi基本图像 ...
- SecureCRT 使用
1. 连接linux 服务器 http://www.cnblogs.com/SimonGao/p/4959274.html
- Blend4 的安装和配置
Microsoft Expression Blend作为一款功能齐全的专业设计工具,可用来针对基于 Microsoft Windows 和基于 Microsoft Silverlight 1.0 的应 ...
- jQ小图标上下滑动特效
嗯,又到了,夜静饥寒的时候,手指颤抖,回望去,屋内满是寂静,寥寥绰影,咳咳咳,想我程序员之路还没到终点...就...咳咳咳 好了日常神经结束,还要涂我的唇膏.还剩下,最后一章,js动画(四),明天放上 ...
- Spring 集成 Dubbo
Duboo是什么 DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次 ...
- Intellij IDEA 建立文件夹目录问题
问题: NEW一个package常出现文件夹层次问题 解决: 1.选中当前文件夹(要在该文件夹下添加): 2.右击此处: 3.添加即可. 链接:http://stackoverflow.com/que ...