TCP/IP网络编程 习题2
Posted liqaing1992
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP/IP网络编程 习题2相关的知识,希望对你有一定的参考价值。
1. 什么是协议?在收发数据中定义协议有何意义?
协议是对话中使用的通信规则.定义协议可让计算机进行正确无误的对话.
2. 面向连接的TCP套接字传输特性有3点,请分别说明?
- 可靠性,传输的过程数据不会丢失
- 字节流,按序传输数据,不存在数据边界
- 面向连接,双方必须建立连接后,才可以进行数据传递
3. 下面哪些是面向消息的套接字特性?
- 传输数据可能丢失 ***
- 没有数据边界
- 以快速传输为目标 ***
- 不限制每次传递数据的大小
- 与面向连接的数据不同,不存在连接的概念 ***
4. 下列数据适合用哪类套接字传输?
- 演唱会现在直播的多媒体数据 --- (UDP,传输速度要快,对数据丢失有一定容忍度)
- 某人压缩过的文本文件 --- (TCP,对数据丢失零容忍,使用具有可靠性的TCP传输方式)
- 网上银行用户与银行之间的数据传递 --- (TCP)
5. 何种类型的套接字不存在数据边界?,这类套接字接受数据时需要注意什么?
TCP套接字不存在数据边界,套接字接受数据时会首先将数据存入由字节数组构成的缓冲区中,
如果读取速度小于写入速度,则缓冲区可能会被填满,此时传输端的套接字会停止传输,以防止数据丢失
6. 更改程序使server端多次传输数据,client端调用一次read函数进行读取
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <unistd.h> 4 #include <string.h> 5 #include <arpa/inet.h> 6 #include <sys/types.h> 7 #include <sys/socket.h> 8 9 void error_exit(char* message); 10 11 int main(int argc, char* argv[]) 12 { 13 int serv_sock, clnt_sock; 14 struct sockaddr_in serv_addr, clnt_addr; 15 socklen_t clnt_addr_size; 16 char message[] = "hello,world"; 17 int i = 0; 18 19 if(argc != 2) 20 { 21 printf("Usage: %s <port> ", argv[0]); 22 getchar(); 23 exit(1); 24 } 25 26 serv_sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); 27 if(serv_sock == -1) 28 error_exit("serv_sock() error! "); 29 30 memset(&serv_addr, 0, sizeof(serv_addr)); 31 serv_addr.sin_family = AF_INET; 32 serv_addr.sin_port = htons(atoi(argv[1])); 33 serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); 34 35 if(bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1) 36 error_exit("bind() error! "); 37 38 if(listen(serv_sock, 5) == -1) 39 error_exit("listen() error! "); 40 41 clnt_addr_size = sizeof(clnt_addr); 42 if((clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size)) == -1) 43 error_exit("accept() error! "); 44 45 while(write(clnt_sock, &message[i++], 1) != -1); 46 47 close(serv_sock); 48 close(clnt_sock); 49 return 0; 50 }; 51 52 void error_exit(char* message) 53 { 54 fputs(message, stderr); 55 fputc(‘ ‘, stderr); 56 exit(1); 57 }
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <unistd.h> 4 #include <string.h> 5 #include <arpa/inet.h> 6 #include <sys/types.h> 7 #include <sys/socket.h> 8 9 #define BUF_SIZE 1024 10 11 void error_exit(char* message); 12 13 int main(int argc, char* argv[]) 14 { 15 int sock; 16 struct sockaddr_in sock_addr; 17 char buf[BUF_SIZE]; 18 int str_len; 19 20 if(argc != 3) 21 { 22 printf("Usage: %s <ip> <port> ", argv[0]); 23 getchar(); 24 exit(1); 25 } 26 27 sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); 28 if(sock == -1) 29 error_exit("socket() error! "); 30 31 memset(&sock_addr, 0, sizeof(sock_addr)); 32 sock_addr.sin_family = AF_INET; 33 sock_addr.sin_port = htons(atoi(argv[2])); 34 sock_addr.sin_addr.s_addr = inet_addr(argv[1]); 35 36 if(connect(sock, (struct sockaddr*)&sock_addr, sizeof(sock_addr)) == -1) 37 error_exit("connect() error! "); 38 39 sleep(2); 40 41 str_len = read(sock, &buf, BUF_SIZE-1); 42 if(str_len == -1) 43 error_exit("read() error! "); 44 45 printf("Message From Server: %s ", buf); 46 close(sock); 47 48 return 0; 49 } 50 51 void error_exit(char* message) 52 { 53 fputs(message, stderr); 54 fputc(‘ ‘, stderr); 55 getchar(); 56 exit(1); 57 }
以上是关于TCP/IP网络编程 习题2的主要内容,如果未能解决你的问题,请参考以下文章