《计算机通讯与网络》实验讲义(7)
后的调用send所使用的地址,而connect本身不建立连接。
参数sockf d是Socket描述符,而servaddr则是成为通信信道另一个端点上进程的地址;addrlen是地址结构sockaddr的长度。当连接建立成功后,connect的返回值不小于0,否则返回出错信息。
4.listen()调用:
int listen(sockf d,queuelen) int sockf d queuelen;
当server方进程准备在一条通信信息上接受连接时,系统必须将到来的连接请求送入队列,直到进程来为该请求服务。listen调用是指明所能接收的连接请求的最大数目,也就是队列的最大长度queuelen参数指出了待处理请求的最大数目sockfd是描述符。
5.accept()调用:
newsockfd== accept(sockfd clieaddr addrlen); int sockfd newsockfd;
struct sockaddr *clieaddr; int *addrlen;
该调用取队列上的第一个连接请求,并建立一个与描述符sockf d具有相询特性的Socket.若没有连接请求,accept阻塞调用者直到有连接请求的到达。
参数sockf d是Socket描述符clieaddr为向server方进程发出连接请求的client方进程地fk ; addrlen为该地址结构的长度。注意,参数clieaddr和addrlen是accept调用返回时,由系统来填人的。
newsockfd是一个与sockfd描述不同的新的Socket描述符;accept调用认为server是并发server,因而不但建立一个新的Socket,而且还指定与newsockf d相联系的新地址。这样server进程一方面可以在与sockf d'相关的地址上继续倾听(listen);另一方面在另一分开的通信信道上(与newsockf d相关的地址)与client进程进行通信。
6.send()和recv()调用:
count== send(sockfd,msg,length,flag); count== recv(sockfd,buf,length,flag); int count,sockf d; char *msg ,*buf; int length flag;
两个调用在一个已连接的socket上发送和接收数据、。参数sockf d为Socket描述符msg是要发送数据的缓冲区length是它的长度buf则是存放到来数据的数组buf也有一个指出其长度的参数length.
如果没有参数flag,上述两个调用的语法及语义与write和read就没有什么不同了。flag使这两个调用有了一些新特性。flag= 0 Of-;表示正常的数据发送或接收;flag =MSG _ OOB时,表示发送或接收带外数据(一种非常规的紧急数据)flag = MSG- PEEK时,表示在接收端上可以“偷看”一个到来的报文,检查它的内容但并不把它从队列中移去;当flag = MSGDON- ROUTE时,表示可以在没有网络路由选择的情况下发送数据。
count是调用的返回值,它以发送或接收的实际数据长度作为自己的内容。
7.send to ( )和recvf rom()调用:
- 19 -
count=sendto(sockfd,msg,length,toaddr,addrlen);
count== recvf rom(sockfd,buf,length,fromaddr,&.addrlen); int count,sockf d; char *msg ,*buf;
struct sockadd,toaddr,*fromaddr;- int length,addrlen;
两调用常用于非连接通信中的发送和接收数据,其返回值以及前三个参数与send和recv调用的参数和返回值含义一样。
参数toaddr指出了发送到目的地的进程地址addrlen是该地址的长度;参数fromaddr是发送数据的进程的地址,它也使用一个整数addrlen来指出长度。
8.close ( )和shutdown()调用: int close (int sockf d );、·
int shutdown (int sockf d , int mode); close调用关闭一套接字,并释放该Socket的描述符shutdown调用关闭一套接字连接,但该Socket描述符仍旧原封不动。
mode为1,指示不允许发送方发送数据;mode为0,表示不允许接收方接收数据;而mode为2,则表示发送和接受数据皆不允许;参数sockfd是Socket描述符。
附:参考程序(C语言)
# include(sys/Socket.h) # include(netinet/in.h) # include(netdb.h)
server方程序 main() {
int sockfd length;
struct sockaddr_ in name; char buf[1024];
//create Socket from which to read sockfd=Socket(AF_INET,SOCK_DGRAM,0); if(sockfd<0) {
perror(\ exit(1); }
//create name with wildcard name.sin_family=AF_INET;
name.sin_addr.s_addr=INADDR_ANY; name.sin_port=0;
- 20 -
if(bind(Sockfd,(struct sockaddr *)&name size of name)<0> {
perror(\ exit(1); }
//find assigned port value length=sizeof(name);
if(getsock name(sockfd(struct sockaddr *)&name &length) <0> {
perror(\ exit(1); }
printf(\ //Read from the Socket
if(read(sockfd,but,1024)<)0)
perror(\ printf(\); close(sockfd); exit(0); }
#include \
#define DATA \ //The form of the command line is //命令 主机 名端口号 ,/ main(argc,argv) int argc; char *argv[]; {
int sockfd;
struct sockaddr_in name;
struct hostnet *hp,*gethostbyname(); //create Socket on which to send
sockfd=Soeket(AF_INET,SOCK_DGRAM,0); if (Sockfd<0) {
perror(\ exit (1); }
hp=gethostbyname(argv[1]); if (hp==0) {
- 21 -
fprintf(stderr,\ exit(2); }
bcopy((char*)hp->h_addr,(char*)&name.sin_addr.hp->h_ length); name.sin_family=AF_INET;
name.sin_port= htons(atoi(argv[2]); /*send message‘/
if( sendto( sockfd,DATA, sizeof( DATA),0,( struct sockaddr *) & name, sized( name))<0) perror(\close( sockfd); exit(0); }
- 22 -
…… 此处隐藏:704字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [基础教育]2016-2022年中国钢芯铝绞线市场现状调
- [基础教育]语文部编版初一语文下册练习题 句式变
- [基础教育]南京继续教育参考答案--深入学习贯彻习
- [基础教育]国旗下讲话稿——珍惜时间好读书
- [基础教育]北师大版六年级数学下册圆锥的体积教学
- [基础教育]人教版-音乐-四年级下册-四年级下册音
- [基础教育]乔布斯2019年斯坦福大学毕业典礼致辞.d
- [基础教育]2015年加油站安全知识竞赛试题及答案
- [基础教育]2020年教师年度考核个人工作总结
- [基础教育]2019年中考历史试题-2019年大庆市初中
- [基础教育]初三仁爱英语第一轮总复习教案
- [基础教育]SG-A094电气配管安装工程隐蔽验收记录
- [基础教育]冀教版小学数学三年级下册第六单元教材
- [基础教育]青岛版(五制)小学科学二年级下册16《制
- [基础教育]2018-2019年初中科学初一中考真卷测试
- [基础教育]幼儿园大班期末简短评语精选
- [基础教育]2018云南临沧公务员考试申论技巧:这样
- [基础教育]学校食堂经营管理方案
- [基础教育]新中国砥砺奋进的七十年原文
- [基础教育]真空泵的选型及常用计算公式
- 高职田径课程教学现状与对策
- 全髋关节置换术在老年股骨颈骨折患者中
- 青人社厅函〔2016〕576号(附件)工资
- cp101-07砂子检验作业指导书 - secret
- 微观经济学 第八章 博弈论 习题
- 2014高考真题(词语运用)汇编及答案
- 2018年人教版七年级语文下册《第三单元
- 苏教版数学四年级上册第一单元试题 - M
- 四川大学新闻与传播考研2000-2010年真
- 浙江万里学院英语专业四年制本科教学计
- 最新2018马年事业祝福语-范文word版(2
- 最全模具行业术语英文翻译
- 皮亚杰的发展心理学理论
- 64篇高考情景式默写 练习题及答案
- 仿写(学生稿)
- 《SQL Server数据库技术》试卷A
- 第七章作业答案
- 江苏省赣榆县海头高级中学高中语文必修
- 浙江省2001年10月自考正常人体解剖学答
- 2012英语重点短语




