两台电脑传输数据的c语言代码,tcp协议网络编程实现两台计算机通信详细注 ...
两台电脑传输数据的c语⾔代码,tcp协议⽹络编程实现两台计算
机通信详细注释精编.
Lele was written in 2021
Lele was written in 2021
TCP协议⽹络编程实现两台计算机通信详细注释精编
3.试⽤C语⾔编写⼀对在以太⽹中发送和接收数据帧的应⽤,建议采⽤Socket的TCP协议端⼝,必须提供软件设计⽅案和流程图,软件代码的每⼀⾏都必须加注中⽂注释说明设计意图,不得抄袭。(必做题)
解答: 编程使⽤TCP/IP协议,采⽤数据流的socket套接⼝,TCP是⾯向连接的通信协议,通过三次握⼿建⽴连接,通讯完成时要拆除连接,由于TCP是⾯向连接的所以只能⽤于点对点的通讯。对⽐⼀下,UDP是⾯向⽆连接的通讯协议,UDP数据包括⽬的端⼝号和源端⼝号信息,由于通讯不需要连接,所以可以实现⼴播发送,UDP通讯时不需要接收⽅确认,属于不可靠的传输,可能会出丢包现象。
程序采⽤服务器/客户机模式,下⾯是服务器的程序设计⽅案
⾸先利⽤socket系统调⽤获得⼀个套接⼝
系统调⽤bind将这个套接⼝绑定到主机的某个端⼝上
端⼝开始侦听有⽆连接请求,系统调⽤listen
没有就继续侦听,有的话执⾏下⼀步
接受connect的请求,系统调⽤accept(),得到⼀个新的套接⼝描述符,这个时候通信管道已经完全建⽴好了
利⽤这个新的描述符完成发送数据帧的操作,系统调⽤send()
发送完毕要撤销套接⼝
下⾯是完整程序和详细注释
清单01
#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会
} /显⽰错误信息,然后⾮正常退出
=AF_INET; / ADDRESS FAMILY 地址族
=htons(MYPORT);/ 把整数MYPORT转换成“⽹络字节顺序”
使⽤⾃⼰的IP地址, ⾃动填上它所运⾏的机器的IP地址
bzero(&,8);/结构体中剩下的清0
上⾯是第⼀步,调⽤socket()得到了⼀个套接⼝,下⾯将调⽤bind()将其绑定到本地计算机的某个端⼝上,当然这⾥就是前⾯定义的那个端⼝
if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1)
{perror("bind"); /如果失败就显⽰bind()调⽤出错原因,成功的话
exit(1); /就继续往下运⾏
}
其实利⽤TCP/IP协议进⾏数据流的传输就像两个地⽅搭个管道输送⽔流⼀样,现在这⾥是⽔电站,前⾯两步已经弄好了⼀个出⽔⼝,下⾯就要监听对⽅是否需要我送⽔过去,运⾏listen()系统调⽤。假如你不希望与远程的⼀个地址相连,那你就需要等待接⼊请求并且⽤各种⽅法处理它们。处理过程分两步:⾸先,你听--listen(),然后,你接受--accept()(请看下⾯的内容)。
if (listen(sockfd,BACKLOG)==-1) /BACKLOG是在进⼊队列中允许的连接数⽬,进⼊的连接是在队列中⼀直等待直到接受(accept()

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。