小工具知识网

当前位置: 首页 > 行业知识 > 2024-2-29-网络编程作业

行业知识

2024-2-29-网络编程作业

2026-11-05 16:41:09 来源:互联网转载

1>TCP

源代码:

服务器端:

#include #define SER_IP "10.168.1.111"#define SER_PORT 8888#define MAXSIZE 128int main(int argc, char const *argv[]){    int sfd = socket(AF_INET, SOCK_STREAM, 0);    struct sockaddr_in sin;    sin.sin_family = AF_INET;    sin.sin_port = htons(SER_PORT);    sin.sin_addr.s_addr = inet_addr(SER_IP);    bind(sfd, (struct sockaddr *)&sin, sizeof(sin));    listen(sfd, 128);    struct sockaddr_in cin;    socklen_t socklen = sizeof(cin);    int newfd = accept(sfd, (struct sockaddr *)&cin, &socklen);    printf("客户端IP:%s, 端口号为:%d\n", inet_ntoa(cin.sin_addr), ntohs(cin.sin_port));    char rbuf[MAXSIZE] = "";    while (1)    {        bzero(rbuf, sizeof(rbuf));        int res = recv(newfd, rbuf, sizeof(rbuf),0);        if (res == 0)        {            printf("客户端已经关闭\n");            break;        }        printf("从IP为%s 端口为%d 接收到数据为:%s\n", inet_ntoa(cin.sin_addr), ntohs(cin.sin_port), rbuf);        strcat(rbuf, "O.o");        send(newfd, rbuf, strlen(rbuf),MSG_DONTWAIT);    }    close(newfd);    close(sfd);    return 0;}

客户端:

#include #define SER_IP "10.168.1.111"#define SER_PORT 8888#define MAXSIZE 128int main(int argc, char const *argv[]){    int cfd = socket(AF_INET, SOCK_STREAM, 0);    struct sockaddr_in sin;    sin.sin_family = AF_INET;    sin.sin_port = htons(SER_PORT);    sin.sin_addr.s_addr = inet_addr(SER_IP);    connect(cfd, (struct sockaddr *)&sin, sizeof(sin));    char wbuf[MAXSIZE] = "";    while (1)    {        bzero(wbuf, sizeof(wbuf));        printf("请输入>>>\n");        fgets(wbuf, sizeof(wbuf), stdin);        wbuf[strlen(wbuf) - 1] = 0;        send(cfd, wbuf, strlen(wbuf), 0);        printf("send success\n");        if (strcmp(wbuf, "quit") == 0)        {            break;        }        bzero(wbuf, sizeof(wbuf));        recv(cfd, wbuf, sizeof(wbuf), 0);        printf("收到消息为:%s\n", wbuf);    }    close(cfd);    return 0;}

效果图

2>UDP

源代码:

服务器端

#include #define SER_IP "10.168.1.111"#define SER_PORT 8888#define MAXSIZE 128int main(int argc, char const *argv[]){    int sfd = socket(AF_INET, SOCK_DGRAM, 0);    struct sockaddr_in sin;    sin.sin_family = AF_INET;    sin.sin_port = htons(SER_PORT);    sin.sin_addr.s_addr = inet_addr(SER_IP);    bind(sfd, (struct sockaddr *)&sin, sizeof(sin));    char rbuf[MAXSIZE] = "";    struct sockaddr_in cin;    socklen_t socklen = sizeof(cin);    while (1)    {        bzero(rbuf, sizeof(rbuf));        recvfrom(sfd, rbuf, sizeof(rbuf), 0, (struct sockaddr *)&cin, &socklen);        printf("接受到的消息为:%s\n", rbuf);        strcat(rbuf, "o.O");        sendto(sfd, rbuf, strlen(rbuf), 0, (struct sockaddr *)&cin,socklen);        printf("发送成功\n");    }    close(sfd);    return 0;}

客户端:

#include #define SER_IP "10.168.1.111"#define SER_PORT 8888#define MAXSIZE 128int main(int argc, char const *argv[]){    int cfd = socket(AF_INET, SOCK_DGRAM, 0);    struct sockaddr_in sin;    sin.sin_family = AF_INET;    sin.sin_port = htons(SER_PORT);    sin.sin_addr.s_addr = inet_addr(SER_IP);    char wbuf[MAXSIZE] = "";    while (1)    {        bzero(wbuf, sizeof(wbuf));        printf("请输入>>>:");        fgets(wbuf,sizeof(wbuf),stdin);        wbuf[strlen(wbuf)-1] = 0;        sendto(cfd, wbuf, sizeof(wbuf), 0, (struct sockaddr *)&sin, sizeof(sin));        printf("发送成功\n");        bzero(wbuf,sizeof(wbuf));        recvfrom(cfd, wbuf, sizeof(wbuf), 0, NULL,NULL);        printf("接受到的消息为:%s\n", wbuf);    }    close(cfd);    return 0;}

效果图:

3>思维导图

4>面试题整理

1.标准IO的实现

通��操作句柄FILE*类型的指针,使用fopen、fclose、fgets等函数来操作文件。在操作过程中,有一个缓冲区,先将要输入或输出的数据,放入缓冲区后,等到缓冲区刷新时机到了后,统一调用内核提供的函数,将数据刷入内核空间,经由内核空间做后续操作。

2.什么是进程?

进程是程序的一次执行过程,是资源分配的基本单位,每个进程会被分配4Gd的虚拟内存,调度机制为:时间片轮询、上下文切换,有一定的生命周期:创建态-->就绪态-->阻塞态-->运行态-->终止态

3.如何将程序执行直接运行于后台?

a.out 后加 &

4.共享内存通信原理

是多个进程之间的通信,共享内存是将独立于多个进程之外的物理内存,分别映射到不同的进程中,其中一个进程对其进行修改,另一个进程也跟着修改;共享内存中的数据的读写不是一次性的,写入共享内存中的数据,被读取后,依然存在,直到下一次写入的数据将其覆盖;共享内存的操作时,由于共享内存段,相对于多个进程属于临界资源,所以对该资源的使用,需要使用同步机制

5.TCP/IP四层网络通信结构?

网络接口层-->网际层-->运输层-->应用层

6.TCP服务器通信流程

创建套接字-->绑定服务器地址信息结构体-->设置被动监听-->阻塞等待客户端的连接-->数据收发-->关闭套接字

7.路由器位于哪一层?

网际层

8.交换机在哪一层?

网络接口层

9.static的用法

作用:static静态变量

1.static修饰的变量内存在静态区

2.static修饰全局变量:static修饰为初始化的全局变量默认结果为0

3.static修饰局部变量:

延长生命周期(内存的申请到释放),延长至整个文件,类似全局,不是作用域。

static修饰未初始化的局部变量,默认结果为0

4.static修饰函数:static修饰函数,生命周期在本文件有效,不可以跨文件调用

5.static修饰指针:

不可以使用staic修的指针指向auto类型的变量地址。

因为计算机先为static类型变量分配内存,后分配auto类型的变量,不允许使用已存在的变量,指向未知的变量地址。

10.const的用法

修饰的变量不可变。修饰普通变量时,相当于常量,且需要初始化;修饰函数参数时,不管是什么数据类型,也不管是 指针传递,还是 引用传递,只要加了 const 修饰,就可以防止函数内意外修改该参数,起到保护作用;用 const 修饰返回的指针或引用,保护指针或引用的内容不被修改。

上一篇:安卓服务器怎么上传文件?

下一篇:手机网页书签怎么设置?