Linux下TCP/IP网络编程——结课考试知识总结

  • socket也被认为是文件的一种,因此在网络数据传输过程中自然也可以使用文件I/O的相关函数。

  • 协议就是为了完成数据交换而做的约定。
    PF_INET—-IPv4互联网协议

  • 下列数据适合用那类套接字传输
    • a.演唱会现场直播的多媒体数据(SCOK_DGRAM)
    • b.某人压缩过的文本文件(SCOK_STREAM)
    • c.网上银行用户与银行之间的数据传递(SCOK_STREAM)
  • 端口号就是在同一操作系统内为区分不同的套接字而设置的,由16位构成,可分配的端口号是0~65535,但1~1023时知名端口,一般分配给特定的应用程序。

  • TCP套接字和UDP套接字不会共用端口号,允许重复,但相同的套接字不允许端口重复。

  • 数据传输目标地址同时包含IP地址和端口号。

  • 客户端调用connect函数后,发生以下情况之一才会返回(完成函数的调用)
    • 服务器端接受连接请求
    • 发生断网等异常情况而中断连接请求
  • TCP
    服务器端和客户端函数调用关系

    迭代服务器端的函数调用顺序


  • ceho_client.c
 #include<stdio.h>
 #include<stdlib.h>
 #include<string.h>
 #include<unistd.h>
 #include<arpa/inet.h>
 #define BUF_SIZE 1024
 void error_handling(char *message);
 int main(int argc,char *argv[])
 {
     int sock;
     char message[BUF_SIZE];
     int str_len;
     struct sockaddr_in serv_adr;
     if(argc!=3)
     {
         printf("Usage: %s <IP><PORT>\n",argv[0]);
         exit(1);
     }
     sock = socket(PF_INET,SOCK_STREAM,0);
         if(sock==-1)
             error_handling("socket() error");
     memset(&serv_adr,0,sizeof(serv_adr));
     serv_adr.sin_family = AF_INET;
     serv_adr.sin_addr.s_addr = inet_addr(argv[1]);
     serv_adr.sin_port = htons(argv[2]);

     if(connect(sock),(struct sockaddr*)&serv_adr,sizeof(serv_adr)) == -1)
         error_handling("connect() error!");
     else
         puts("Connected......");
 while(1)
 {
     fputs("Input message(Q to quit):",stdout);
     fgets(message,BUF_SIZE,stdin);

     if(!strcmp(message,"q\n") || !strcmp(message,"Q\n"))
         berak;

     write(sock,message,strlen(message));
     str_len = read(sock,message,BUF_SIZE-1);
     message{str_len} = 0;
     printf("Message from server: %s",message);
 }
     close(sock);
     return 0;
 }

 void error_handling(char *message)
 {
     fputs(message,stderr);
     fputc('\n',stderr);
     exit(1);
 }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
1、制作ramdisk,给出主次设备号,并使用df命令显示相关信息。(20分) 要求:(1) ramdisk的大小为学号的后3位*2,单位为M; (2)对文件系统采用ext2进行格式化。 2、编写一个c程序实现下面的功能:监视一个文件,如果文件被其他进程追加了内容,就把追加的内容打印出来。(15分) (1) 假定所编辑的c程序为mytail.c,使用命令行方式将该源程序编译,目标执行程序为mytail。给出具体的编译实现过程。 (2) 假定日志文件为/usr/tmp/pppd.log,给出打印追加内容的方法。 3、设用户mali记录了在Linux系统中的某些用户的月工资清单,记录在文件mylist.txt中,假定文件mylist.txt的内容如下: #================================================== # 登录名 工作证号 姓名 月份 工资 奖金 补助 扣除 总额 #--------------------------------------------------- wang 2076 wangxi 01 1782 1500 300 175 3407 liang 2074 liangyu 02 1560 1400 280 90 3150 zhang 3087 zhangdi 03 1804 1218 206 213 3015 wang 2076 wangxi 03 1832 1550 230 245 3367 wang 2076 wangxi 04 1832 1450 230 245 3267 liang 2074 liangyu 05 1660 1450 230 70 3270 zhang 3087 zhangdi 06 1700 1310 283 270 3023 #================================================== 只允许用户zhang读取行首字符为#的行和与用户zhang有关的行,与其他用户有关的行对用户zhang保密。(15分) (1) 编写相应的查询query.c,给出目标文件为query的实现方法; (2) 给出设置mylist.txt文件权限为仅对文件主具有读写权限的实现命令; (3) 给出设置query文件用户ID权限实现命令; (4) 给出用户zhang执行程序query的结果。 4、使用fork,exec以及wait函数构造简单的shell解释程序。(15分) (1) 假定所编辑的c程序为myxsh.c,使用命令行方式将该源程序编译,目标执行程序为myxsh。给出具体的编译实现过程。 (2) 假定当前目录下有文件信息如下: 文件的行大小 文件名 文件的行大小 文件名 920 auther.c 146 licp.txt 127 myxsh.c 124 fus.h 160 chap1.h 152 myxse.c 46 fsme.h 164 fsme 运行myxsh程序出现提示符=>后,分析find . -name *.[ch] -exec wc -l {} ; 执行结果。 5、对/usr目录进行压缩归档,结果文件名位myusr.tar。(10分) 要求:(1)以控制台方式运行; (2)将该任务挂起,再转后台,再转前台,查看进程的状态变迁过程。 6、编写程序实现通过Windows客户端对Linux服务器端进行相关网络信息配置。(25分) 要求:(1)新修改服务器的IP 地址的构成方式:网络号为192.168.2.0,主机号为学号的后3位-150;掩码为255.255.255.0;默认网关为:网络号与服务器相同,主机号为1,DNS202.117.96.10; (2)服务器端程序以deamon程序的方式运行,监听端口为学号的后4位; (3)客服端使用VC++,以GUI 方式完成对服务器端的IP 地址、掩码、默认网关、DNS信息配置输入; (4)服务器端在接收客户端的配置信息后,使用exec 系列函数完成对IP 地址、掩码、默认网关、DNS修改,并写入相应的配置文件。结果验证:使用ifconfig检查IP地址信息配置的正确性;使用nslookup检查DNS信息的正确性。 把实现的信息结果与配置文件比较,检查其一致性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值