没有合适的资源?快使用搜索试试~ 我知道了~
xtu湘潭大学 网络编程 tcp udp 代码源码 填空题 代码题
资源推荐
资源详情
资源评论
(第 1 页 共 27 页)
一、客户库例程实现。
阅读以下说明和 C 代码,将__(n)__处缺少的内容填写完整。
【说明】
源文件 connectsock.c 中定义的函数 connectsock 分配套接口和连接该套接口,该函
数通常作为库例程被其它程序调用(如 UDPecho.c 和 TCPecho.c 等 )。
【源文件 connectsock.c 代码】
/* connectsock.c - allocate & connect a socket using TCP or UDP */
/* 此处省略预编译指令的#include 部分 */
int
connectsock(const char *node, const char *service, const char *transport)
{
struct addrinfo *result, *resptr;
struct addrinfo hints = { 0 };
int ret, connectsocket, type;
if (strcmp(transport, "udp") == 0)
type = __⑴
__ ;
else if (strcmp(transport, "tcp") == 0)
type = __⑵
__ ;
else
errx(1, "connectsock arguments error: unknown transport");
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = __⑶
__ ;
hints.ai_protocol = 0;
if ((ret = getaddrinfo( __⑷
__ )) != 0)
errx(1, "getaddrinfo error: %s", gai_strerror(ret));
for ( __⑸
__ ) {
if ((connectsocket = socket( __⑹__ )) < 0) {
ret = errno;
}
else if ((connect( __⑺
__ )) < 0) {
ret = errno;
__⑻
__ ;
}
else {
freeaddrinfo(result);
__⑼
__ ;
}
}
errno = ret;
errx(1, "can't connect to %s.%s: %s", node, service, strerror(errno));
exit(1);
}
(第 2 页 共 27 页)
二、针对 DAYTIME 服务的 TCP 客户实现
阅读以下说明和 C 代码,将__(n)__处缺少的内容填写完整。
【说明】
源文件 TCPdaytime.c 包含针对 DAYTIME 服务的简单 TCP 客户程序。
本题程序调用了自定义例程库函数 connectsock 分配套接口和连接该套接口。
【源文件 TCPdaytime.c 代码】
/* TCPdaytime.c - main, TCPdaytime */
/* 此处省略预编译指令的#include 部分 */
int TCPdaytime(int);
int connectsock(const char *, const char *, const char *);
#define LINELEN 4096 /* max text line length */
int
main(int argc, char *argv[])
{
char *host = "localhost"; /* host to use if none supplied */
char *service = "daytime"; /* default service port */
int sock; /* socket descriptor */
switch (argc) {
case 1:
host = "localhost";
break;
case 3:
service = argv[2];
/* FALL THROUGH */
case 2:
host = argv[1];
break;
default:
errx(1, "usage: %s [host [port]]\n", __⑴
__ );
}
sock = connectsock( __⑵
__ );
exit( __⑶__ );
}
int
TCPdaytime(int sd)
{
char buf[LINELEN+1]; /* buffer for one line of text */
int nchars; /* read count */
while ((nchars = __⑷
__ )) {
if ( __⑸__ )
err(1, "TCPdaytime read error");
buf[nchars] = __⑹
__ ; /* ensure null-terminated */
fputs(buf, stdout);
}
return 0;
}
(第 3 页 共 27 页)
三、针对 TIME 服务的 UDP 客户实现
阅读以下说明和 C 代码,将__(n)__处缺少的内容填写完整。
【说明】
源文件 UDPtime.c 包含针对 TIME 服务的简单 UDP 客户程序。
本题程序调用了自定义例程库函数 connectsock 分配套接口和连接该套接口。
【源文件 UDPtime.c 代码】
/* UDPtime.c - main, UDPtime */
/* 此处省略预编译指令的#include 部分 */
#define BUFFSIZE 8192 /* buffer size for reads and writes */
#define UNIXEPOCH 2208988800UL /* UNIX epoch, in UCT secs */
#define MSG "what time is it?\n"
int UDPtime(int);
int connectsock(const char *, const char *, const char *);
int
main(int argc, char *argv[])
{
char *host = "localhost"; /* host to use if none supplied */
char *service = "time"; /* default service name */
int sock; /* socket descriptor */
switch (argc) {
case 1:
host = "localhost";
break;
case 3:
service = argv[2];
/* FALL THROUGH */
case 2:
host = argv[1];
break;
default:
errx(1, "usage: %s [host [port]]\n", __⑴
__ );
}
sock = connectsock( __⑵
__ );
exit( __⑶__ );
}
int
UDPtime(int sd)
{
time_t now; /* 32-bit integer to hold time */
int nchars; /* read count */
(void) write( __⑷
__ ));
nchars = read( __⑸
__ );
if ( __⑹__ )
err(1, "UDPtime read error");
now = ntohl( __⑺
__ ); /* put in host order */
(第 4 页 共 27 页)
now -= __⑻__ ; /* convert UCT to UNIX epoch */
printf("%s", asctime(localtime(&now)));
return 0;
}
(第 5 页 共 27 页)
四、针对 ECHO 服务的客户实现。
阅读以下说明和 C 代码,将__(n)__处缺少的内容填写完整。
【说明】
源文件 TCPecho.c 包含针对 ECHO 服务的简单 TCP 客户程序。
源文件 UDPecho.c 包含针对 ECHO 服务的简单 UDP 客户程序。
本题程序调用了自定义例程库函数 connectsock 分配套接口和连接该套接口。
【源文件 TCPecho.c 代码】
/* TCPecho.c - main, TCPecho */
/* 此处省略预编译指令的#include 部分 */
int TCPecho(int);
int connectsock(const char *, const char *, const char *);
#define LINELEN 128
/* main - TCP client for ECHO service */
int
main(int argc, char *argv[])
{
char *host = "localhost";
char *service = "echo";
int socketd;
switch (argc) {
case 1:
host = "localhost";
break;
case 3:
service = argv[2];
case 2:
host = argv[1];
break;
default:
errx(1, "usage: %s [host [port]]\n", __⑴
__ );
}
socketd = connectsock( __⑵
__ );
exit( __⑶__ );
}
/* TCPecho - send input to ECHO service on specified host and print reply */
int
TCPecho(int sock)
{
char buf[LINELEN+1];
int cc, inchars, outchars;
while (fgets(buf, sizeof(buf), stdin)) {
buf[LINELEN] = '\0';
outchars = __⑷
__ ;
(void) write( __⑸__ );
for ( __⑹
__ ) {
cc = read( __⑺__ );
if (cc < 0)
err(1, "TCPecho read");
剩余26页未读,继续阅读
资源评论
温雅小巧
- 粉丝: 16
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功