没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
25页
实验项目名称 实验一 TCP、UDP 网络编程 实验日期 2021.3.22 实验要求 linux 环境下 C 语言程序的编译、调试(分单个 C 语言源文件和多个 C 语言源文件的情况),并参照上课例程完成 TCP 客户服务器模型和 UDP 客户服务器模型的实现;实验报告:包括客户服务器端的流程图、源码、编译过程和运行结果。 实验项目名称 实验二 利用 TCP 完成文件传输的设计和实现 实验日期 2021.3.29 实验项目名称 实验三 TCP 实现跨平台文件传输 实验日期 2021.4.12 实验项目名称 实验四 利用多进程和多线程实现服务器端的并发处理 实验日期 2021.4.19 实验项目名称 实验五 I/O 复用完成单线程并发服务器的处理 实验日期 2021.4.26
资源推荐
资源详情
资源评论
1
实 验 指 导 手 册
课 程 名 称:
网络程序设计
学 院:
计算机科学与工程学院
山 东 科 技 大 学
2
实 验 一
实验项目名称
实验一 TCP、UDP 网络编程
实验日期
2021.3.22
实验要求
linux 环境下 C 语言程序的编译、调试(分单个 C 语
言源文件和多个 C 语言源文件的情况),并参照上课
例程完成 TCP 客户服务器模型和 UDP 客户服务器模
型的实现;实验报告:包括客户服务器端的流程图、
源码、编译过程和运行结果。
实验目的
1.使用 TCP 进行套接字通信
2.使用 UDP 进行套接字通信
实验原理
1.TCP
2. UDP
3
3.用到的 API
(1)
int socket(int domain, int type, int protocol);
根据指定的地址族、数据类型和协议来分配一个 socket 的描述字及其所用的资源。
domain:协议族,常用的有 AF_INET、AF_INET6、AF_LOCAL、AF_ROUTE 其中 AF_INET 代表使
用 ipv4 地址
type:socket 类型,常用的 socket 类型有,SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、
SOCK_PACKET、SOCK_SEQPACKET 等
protocol:协议,常用的协议有,IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC
等
(2)
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
把一个地址族中的特定地址赋给 socket
sockfd:socket 描述字,也就是 socket 引用
addr:要绑定给 sockfd 的协议地址
addrlen:地址的长度
通常服务器在启动的时候都会绑定一个众所周知的地址(如 ip 地址+端口号),用于提供服
务,客 户就可以通过它来接连服务器;而客户端就不用指定,有系统自动分配一个端口号
和自身的 ip 地 址组合。这就是为什么通常服务器端在 listen 之前会调用 bind(),而客
4
户端就不会调用,而是在 connect()时由系统随机生成一个
(3)
int listen(int sockfd, int backlog);
监听 socket
sockfd:要监听的 socket 描述字
backlog:相应 socket 可以排队的最大连接个数
(4)
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
连接某个 socket
sockfd:客户端的 socket 描述字
addr:服务器的 socket 地址
addrlen:socket 地址的长度
(5)
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
TCP 服务器监听到客户端请求之后,调用 accept()函数取接收请求
sockfd:服务器的 socket 描述字
addr:客户端的 socket 地址
addrlen:socket 地址的长度
(6)
ssize_t read(int fd, void *buf, size_t count);
读取 socket 内容
fd:socket 描述字
buf:缓冲区
count:缓冲区长度
(7)
ssize_t write(int fd, const void *buf, size_t count);
向 socket 写入内容,其实就是发送内容
fd:socket 描述字
buf:缓冲区
count:缓冲区长度
(8)
int close(int fd);
socket 标记为以关闭 ,使相应 socket 描述字的引用计数-1,当引用计数为 0 的时候,触发
TCP 客户 端向服务器发送终止连接请求。
实验内容
1.TCP
(1)server.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
5
#define PORT 12345
#define LISTENQ 10
int main() {
int fd = socket(AF_INET, SOCK_STREAM, 0);//创建套接字
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(PORT);
addr.sin_addr.s_addr = INADDR_ANY;
bind(fd, (struct sockaddr*)&addr, sizeof(addr));//绑定
listen(fd, LISTENQ);//监听
int fd_;
int size;
struct sockaddr_in addr_;
int len = sizeof(addr_);
if ((fd_ = accept(fd,(struct sockaddr*)&addr_, &len)) < 0){//调用 accept 接受请
求
printf("error\n");
}else
printf("success\n");
int buflen = 1000;
char buffer[buflen];
for(;;)
{
memset(buffer,0,sizeof(buffer));
size = recv(fd_,buffer,buflen,0);
buffer[size] = '\0';
if(strcmp(buffer,"end\n")==0)
{
return 0;
}
printf("%s",buffer);
write(fd_,buffer,strlen(buffer)+1);
}
close(fd_);
close(fd);
return 0;
}
(2)client.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
剩余24页未读,继续阅读
资源评论
Bean-cocks
- 粉丝: 1
- 资源: 23
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功