TCP协议网络编程实现两台计算机通信(详细注释).doc

TCP协议网络编程实现两台计算机通信(详细注释).doc

ID:57395534

大小:25.50 KB

页数:4页

时间:2020-08-15

TCP协议网络编程实现两台计算机通信(详细注释).doc_第1页
TCP协议网络编程实现两台计算机通信(详细注释).doc_第2页
TCP协议网络编程实现两台计算机通信(详细注释).doc_第3页
TCP协议网络编程实现两台计算机通信(详细注释).doc_第4页
资源描述:

《TCP协议网络编程实现两台计算机通信(详细注释).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、3.试用C语言编写一对在以太网中发送和接收数据帧的应用,建议采用Socket的TCP协议端口,必须提供软件设计方案和流程图,软件代码的每一行都必须加注中文注释说明设计意图,不得抄袭。(必做题)解答:编程使用TCP/IP协议,采用数据流的socket套接口,TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于点对点的通讯。对比一下,UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送,UD

2、P通讯时不需要接收方确认,属于不可靠的传输,可能会出丢包现象。程序采用服务器/客户机模式,下面是服务器的程序设计方案【1】首先利用socket系统调用获得一个套接口【2】系统调用bind将这个套接口绑定到主机的某个端口上【3】端口开始侦听有无连接请求,系统调用listen【4】没有就继续侦听,有的话执行下一步【5】接受connect的请求,系统调用accept(),得到一个新的套接口描述符,这个时候通信管道已经完全建立好了【6】利用这个新的描述符完成发送数据帧的操作,系统调用send()【7】发送

3、完毕要撤销套接口下面是完整程序和详细注释清单01server.c#include#include#include#include#include#include#include#include/头文件#defineMYPORT3490/定义用于通信的端口号#defineBACKLOG10/定义等待队列中最多存放的con

4、nect请求个数main()/主函数这里开始{intsockfd,new_fd;/这两个是调用socket()系统调用得到的文件描述符structsockaddr_inmy_addr;/结构体定义,这是自己和对方的套接口的地址信息structsockaddr_intheir_addr;intsin_size;/其实这是accept()里面的第三个参数,这里先定义if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){perror("socket");/进入正题

5、,首先socket()系统调用,sockfd就是exit(1);/所得套接口的文件描述符,如果调用失败,perror会}/显示错误信息,然后非正常退出my_addr.sin_family=AF_INET;/ADDRESSFAMILY地址族my_addr.sin_port=htons(MYPORT);/把整数MYPORT转换成“网络字节顺序”my_addr.sin_addr.s_addr=INADDR_ANY;/使用自己的IP地址,自动填上它所运行的机器的 IP 地址bzero(&(my_addr.

6、sin_zero),8);/结构体中剩下的清0上面是第一步,调用socket()得到了一个套接口,下面将调用bind()将其绑定到本地计算机的某个端口上,当然这里就是前面定义的那个端口if(bind(sockfd,(structsockaddr*)&my_addr,sizeof(structsockaddr))==-1){perror("bind");/如果失败就显示bind()调用出错原因,成功的话exit(1);/就继续往下运行}其实利用TCP/IP协议进行数据流的传输就像两个地方搭个管道输送

7、水流一样,现在这里是水电站,前面两步已经弄好了一个出水口,下面就要监听对方是否需要我送水过去,运行listen()系统调用。假如你不希望与远程的一个地址相连,那你就需要等待接入请求并且用各种方法处理它们。处 理过程分两步:首先,你听--listen(),然后,你接受--accept() (请看下面的 内容)。if(listen(sockfd,BACKLOG)==-1)/BACKLOG 是在进入 队列中允许的连接数目,进入的连接是在队列中一直等待直 到接受 (accept() )连接{perror(

8、"listen");/在错误的时候返回-1,并 设置全局错误变量 errnoexit(1);}下面就是接受一个连接请求了while(1){sin_size=sizeof(structsockaddr_in);if((new_fd=accept(sockfd,(structsockaddr*)&their_addr,&sin_size))==-1){perror("accept");/注意这里出现了第二个文件描述符,如果只想让一个连接进来,那么你可以使用 close() 去关闭原 来

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。