COS461-普林斯顿大学计算机网络课程-assignment1实现

本文介绍了COS461计算机网络课程的Assignment1,任务包括环境搭建和socket编程。作业中,使用Go语言实现了server和client,server需死循环等待连接并输出接收到的数据,不使用fork;client读取标准输入发送一次消息后退出。文章提供了C语言和Go语言的核心代码示例,并提到了测试脚本的运行情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

COS461是普林斯顿大学的计算机网络课程:https://github.com/PrincetonUniversity/COS461-Public

课程实现

assignment1

assignment1

这次作业的任务大概分为两大部分:搭建环境和socket编程。

搭建环境

按照教程一步一步搭建即可,期间可能会有各种问题,这时候Google或者百度解决即可。

socket编程

编程部分分为两部分,c语言版本和python或者go版本的server和client,我这里使用go语言。

建议先仔细看编程要求:

  1. server端需要死循环等待client端连接
  2. server端需要把从客户端传来的数据输出到标准输出,之后不需要做任何其他事情
  3. server端注意不要使用fork!!!
  4. client端需要读取标准输入,直到读到EOF
  5. client端只需要发送一次消息即可,发送完即可退出,不需要死循环!!!
C语言部分
  • 课程里给了一个教程地址:https://beej.us/guide/bgnet/html/

  • 可以看这个教程快速熟悉Linux系统编程和socket编程的知识,如果想系统学习,建议去看《Unix网络编程》,入门必备。

  • 其实大概框架可以参考上面的教程的例子写出来,比较麻烦的部分是输入输出部分

贴一下核心代码:

  • server-c.c:
  while (1)
  {
    // main accept() loop
    sin_size = sizeof their_addr;
    new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size);
    if (new_fd == -1)
    {
   
      perror("accept");
      continue;
    }

    char buf[RECV_BUFFER_SIZE];
    n = recv(new_fd, buf, RECV_BUFFER_SIZE, 0);
    while (n > 0)
    {
   
      fwrite(buf, n, 1, stdout);
      fflush(stdout);
      n = recv(new_fd, buf, RECV_BUFFER_SIZE, 0);
    }

    close(new_fd);
  }
  • client-c.c:
  numbytes = fread(buf, 1, SEND_BUFFER_SIZE, stdin);
  while (numbytes > 0)
  {
   
    if (send(sockfd, buf, numbytes, 0) == -1)
    {
   
      fprintf(stderr, "client: failed to send\n");
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值