前言参考
———————————————— 版权声明:本文为CSDN博主「蓝精灵喜欢格格巫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/dive668/article/details/119202871 ————————————————
本博文基于作者上一篇博文(Linux网络编程基础知识),主要用于完善作业,代码改动其实很小。
argc !=2是什么意思
What does argc mean? [duplicate]
argc是参数的数量,并且argv是一个字符串数组。 程序本身是第一个参数argv[0],因此argc总是至少为 1。 那么,argc是2当程序使用一个命令行参数运行。如果它不带参数运行,或者超过一个参数,argc != 2则为真,因此将打印使用消息“Usage: display_image ImageToLoadAndDisplay”,告诉用户如何正确运行它。
inet pton函数
inet_pton()和inet_ntop()函数详解
对stdin,stdout 和STDOUT_FILENO,STDIN_FILENO的学习
对stdin,stdout 和STDOUT_FILENO,STDIN_FILENO的学习
Linux网络编程基础知识
【Linux】网络编程基础知识
Linux下C语言编程
1.首先我们通过如下命令创建一个名为count.c 的文件,并在vim编辑器内,向其中写入C语言程序。
vim count.c
2.用 -o 编译选项来为将产生的可执行文件指定一个文件名来代替 a.out . 例如, 将一个叫 count.c 的 C 程序编译为名叫 count 的可执行文件, 你将输入下面的命令:
gcc -o count count.c
3.执行count.c
./count
即可运行count
实例:linux下运行hello world
vim hello_world.c
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("hello world for linux!\n");
return 0;
}
gcc -o hello hello_world.c
- 提示没有找到
gcc ,请install gcc ,通过如下指令install gcc
sudo apt-get update
sudo apt install gcc
./hello
成功运行
实验内容和要求
实现以下程序
1.服务器端存放共享变量var_temp,该值从终端(键盘)中输入。 2.多个客户端(数量大于3)不断向服务器端发送数据请求(固定内容"get current var_temp") (ps:此处涉及到并发控制) 3.服务器点接收到客户端请求("get current var_temp") 后,将var_temp 的值减1后发给请求的客户端 (ps:此处是服务器端数据处理并返回) 4.客户端收到服务器端的数据后输出到终端上(printf输出) 5.当服务器端的var_temp 值为0 ,向请求的客户端发送 "over" 6.客户端收到"over" 后,退出。
要求:
用C语言编写客户端和服务器端应用程序,输出结果截屏保存到实验报告中。 作业除了提交word版本、PDF版本的报告以外,还需要提交可编译执行的源代码。
完整代码
客户端
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
'''
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
'''
#define MAXLINE 80
#define SERV_PROT 6666
int main(void)
{
struct sockaddr_in servaddr,cliaddr;
socklen_t cliaddr_len;
int listenfd,connfd;
char buf[MAXLINE];
char str[INET_ADDRSERLEN];
int i,n;
listenfd=socket(AF_INET,SOCK_STEAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(SERV_PROT);
bind(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
listen(listenfd,20);
printf("Accepting connections...\n");
while(1)
{
cliaddr_len=sizeof(cliaddr);
connfd=accept(listenfd,(struct sockaddr *)&cliaddr,&cliaddr_len);
n=recv(connfd,buf,MAXLINE,0);
printf("received from %s at PORT %d\n",inet_stop(AF_INET,&cliaddr.sin_addr,str,sizeof(stderr),ntohs(cliaddr.sin_port));
for(i=0;i<n;++i)
if(buf[i]!='0')
buf[i]=buf[i]-1;
else
{
buf="error";
break;
}
send(connfd,buf,n,0);
close(connfd);
}
return 0;
}
服务器端
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
'''
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
'''
#define MAXLINE 80
#define SERV_PROT 6666
int main(void)
{
struct sockaddr_in servaddr,cliaddr;
socklen_t cliaddr_len;
int listenfd,connfd;
char buf[MAXLINE];
char str[INET_ADDRSERLEN];
int i,n;
listenfd=socket(AF_INET,SOCK_STEAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(SERV_PROT);
bind(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
listen(listenfd,20);
printf("Accepting connections...\n");
while(1)
{
cliaddr_len=sizeof(cliaddr);
connfd=accept(listenfd,(struct sockaddr *)&cliaddr,&cliaddr_len);
n=recv(connfd,buf,MAXLINE,0);
printf("received from %s at PORT %d\n",inet_stop(AF_INET,&cliaddr.sin_addr,str,sizeof(stderr),ntohs(cliaddr.sin_port));
for(i=0;i<n;++i)
if(buf[i]!='0')
buf[i]=buf[i]-1;
else
{
buf="error";
break;
}
send(connfd,buf,n,0);
close(connfd);
}
return 0;
}
|