C语言实现通信数据帧,TCP协议网络编程实现两台计算机通信(详细注释)

客户机/服务器模式 实现计算机通信

3.试用C语言编写一对在以太网中发送和接收数据帧的应用,建议采用Socket的TCP协议端口,必须提供软件设计方案和流程图,软件代码的每一行都必须加注中文注释说明设计意图,不得抄袭。(必做题)

解答: 编程使用TCP/IP协议,采用数据流的socket套接口,TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于点对点的通讯。对比一下,UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送,UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出丢包现象。

程序采用服务器/客户机模式,下面是服务器的程序设计方案

【1】 首先利用socket系统调用获得一个套接口

【2】 系统调用bind将这个套接口绑定到主机的某个端口上

【3】 端口开始侦听有无连接请求,系统调用listen

【4】 没有就继续侦听,有的话执行下一步

【5】 接受connect的请求,系统调用accept(),得到一个新的套接口描

述符,这个时候通信管道已经完全建立好了

【6】 利用这个新的描述符完成发送数据帧的操作,系统调用send()

【7】 发送完毕要撤销套接口

下面是完整程序和详细注释

清单01 server.c

#include

#include

#include

#include

#include

#include

#include

#include /头文件

#define MYPORT 3490 /定义用于通信的端口号

#define BACKLOG 10 /定义等待队列中最多存放的connect请求个数 main() /主函数这里开始

{int sockfd,new_fd; /这两个是调用socket()系统调用得到的文件描述符 struct sockaddr_in my_addr; /结构体定义,这是自己和对方的套接口的地址信息 struct sockaddr_in their_addr;

int sin_size; /其实这是accept()里面的第三个参数,这里先定义 if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)

{perror("socket"); /进入正题,首先socket()系统调用,sockfd就是 exit(1); /所得套接口的文件描述符,如果调用失败,perror会 } /显示错误信息,然后非正常退出

my_addr.sin_family=AF_INET; / ADDRESS FAMILY 地址族

my_addr.sin_port=htons(MYPORT);/ 把整数MYPORT转换成“网络字节顺序” my_addr.sin_addr.s_addr=INADDR_ANY;/ 使用自己的IP地址, 自动填上它所运

行的机器的 IP 地址

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值