qq_莫非

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define PORT 1234

#define BACKLOG 5

#define MAXDATASIZE 1000

void process_cli(int connfd,struct sockaddr_in client);

int main(){

int listenfd,connfd;

pid_t pid;

struct sockaddr_in server;

struct sockaddr_in client;

int len;

if((listenfd=socket(AF_INET,SOCK_STREAM,0))==-1){

perror("Creating sock falied");

exit(1);

}

int opt=SO_REUSEADDR;

setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));

bzero(&server,sizeof(server));

server.sin_family=AF_INET;

server.sin_port=htons(PORT);

server.sin_addr.s_addr=htonl(INADDR_ANY);

if(bind(listenfd,(struct sockaddr *)&server,sizeof(server))==-1){

perror("Bind error");

exit(1);

}

if(listen(listenfd,BACKLOG)==-1){

perror("listen() error\n");

exit(1);

}

len=sizeof(client);

while(1){

if((connfd=accept(listenfd,(struct sockaddr *)&client,&len))==-1){

perror("accept() error\n");

exit(1);

}

if((pid=fork())>0){

close(connfd);

continue;

}else if(pid==0){

close(listenfd);

process_cli(connfd,client);

exit(0);

}else{

printf("fork() error\n");

exit(0);

}

}

close(listenfd);

}

void process_cli(int connfd,struct sockaddr_in client){

int num;

char recvbuf[MAXDATASIZE],sendbuf[MAXDATASIZE],cli_name[MAXDATASIZE];

printf("You got a connection from %s.\n",inet_ntoa(client.sin_addr));

num=recv(connfd,cli_name,MAXDATASIZE,0);

if(num==0){

close(connfd);

printf("Client disconnected.\n");

return;

}

cli_name[num-1]='\0';

printf("Client's name is %s.\n",cli_name);

printf("Client's port is %d.\n",ntohs(client.sin_port));

while(num=recv(connfd,recvbuf,MAXDATASIZE,0)){

recvbuf[num]='\0';

//printf("Received client(%s) message:%s",cli_name,recvbuf);

if(!strcmp(recvbuf,"quit")){//判断用户输入的是否是quit

break;

}

int i=0;

for(i=0;i

if((recvbuf[i]>='a'&&recvbuf[i]<='z')||(recvbuf[i]>='A'&&recvbuf[i]<='Z')){

recvbuf[i]=recvbuf[i]+4;

if((recvbuf[i]>'Z'&&recvbuf[i]<='Z'+4)||(recvbuf[i]>'z'))

recvbuf[i]=recvbuf[i]-26;

}

sendbuf[i]=recvbuf[i];

}

sendbuf[num-1]='\0';

printf("The encrypted message from client(%s) is:%s\n",cli_name,sendbuf);

send(connfd,sendbuf,strlen(sendbuf),0);

}

close(connfd);

}

c语言中数组结尾的0的作用,C语言里面一个数组最后的\0表示什么意思?相关推荐

  1. c语言中的单词的意思及作用,C语言实现单词助手功能

    本文实例为大家分享了C语言实现单词小助手的具体代码,供大家参考,具体内容如下 单词小助手 (声明:此程序非原创,是在已有程序上进行一些修改和添加) 一.题目分析 题目要求: 1.改写程序为良好程序风格 ...

  2. c语言中定义结构体指针的作用,C语言结构体定义,使用及指针(1)

    前言 C语言中的结构体作为一大难点,并且对于需要学习数据结构的同学来说,这个结构是每次上课都会遇到的,所以,我们只有更深层次的理解结构体的知识,才能更好的掌握数据结构 结构体用处 结构体到底有什么用? ...

  3. C语言中文件读写方式r 的作用,C语言文件读写操作主要函数及其用例

    C语言把磁盘文件看成是字符(或字节)的序列,按照存储信息的形式来说,文件主要是有文本文件和二进制文件.文本文件由一个个字符组成,每个字节存放一个ASCII码制,代表一个字符.二进制文件把内存中的数据按 ...

  4. c语言中赋值的时候顿号的作用,C语言运算符及其优先级汇总表口诀

    在看一些字符串问题的时候,经常出现这样的语句, *tmp++ = *p;比如tmp和p是指向数组元素的指针,那么这个语句的执行顺序是怎样的呢?正确的理解是*tmp,将*p赋给*tmp后tmp++.但是 ...

  5. c语言中定义结构体指针的作用,c语言定义结构体指针

    int main() { typedef struct { u8 KeyCurrentIndex;//当前状态索引号 u8 KeyEnterState;//按下[enter]键时转向的索引号 u8 K ...

  6. c语言中函数名可不可以由用户命名,C语言中变量名及函数名的命名规则与驼峰命名法...

    在程序设计中,变量名.函数名.数组名等统称为标识 符.简单地说,标识符就是一个名字.除库函数的函数名由系统定义外,其余都由用户自定义.C语言规定,标识符只能由字母(a-z,A-Z).数字 (0-9). ...

  7. 常见位操作及运算应用举例:1,C语言中位运算符异或“∧”的作用​​​​​​​2,异或运算的作用3,(与运算)、|(或运算)、^(异或运算)

    1 C语言中位运算符异或"∧"的作用: 异或运算符∧也称XOR运算符.它的规则是若参加运算的两个二进位同号,则结果为0(假):异号则为1(真).即0∧0=0,0∧1=1,1∧1=0 ...

  8. c语言中各个符号的意义及作用是什么,C语言特殊符号意义

    初学者可以来学学,包教包会 C语言中像%D &%f符号的作用说一下 最佳答案 C语言中的符号 运算符的种类C语言的运算符可分为以下几类: 1.算术运算符 用于各类数值运算.包括加(+).减(- ...

  9. c语言中不能编译,为什么`int;`可以在C语言中很好地编译,而在C ++中却不能?

    考虑以下程序(请参见此处的现场演示). #include int main(void) { int ;  // Missing variable name puts("Surprise&qu ...

  10. C语言中双下划线__的作用

    C语言中双下划线__的作用 以单下划线(_)表明是标准库的变量 双下划线(__) 开头表明是编译器的变量 所以 双下划线__只是C语言的一个合法标识符 不一定是变量, 也可以是函数,宏等. 同时双下划 ...

最新文章

  1. 新手C#string类常用函数的学习2018.08.04
  2. JavaScript学习随记——错误类型
  3. 观察者模式和js自定义事件
  4. 查看linux上卸载mysql数据库_linux卸载mysql数据库
  5. canvas 画点_css+canvas 随便画一个星空
  6. gFTP不能显示中文文件(夹)名的解决方法
  7. UVA669 LA5662 Defragment【暴力】
  8. 【leetcode】Trips and Users
  9. sw如何缩放装配体_solidworks提高大型装配体的展示、设计效率
  10. 湖南师范大学计算机网络基础教学平台,基于网络的师徒式教学平台的设计与实现...
  11. html自动关机代码,电脑自动关机命令,shutdown命令
  12. (曲率系列4:)基于点拟合二次曲面并求曲率
  13. 华为鸿蒙操作系统国美通讯,国美通讯(600898)03月06日14:30大单揭秘
  14. APNS(Apple Push Notification Service)远程推送原理解析
  15. html文件命名首字母大写,HTML制作中的文件夹及文件命名规范(一)
  16. C#与VC相互调用之C#调用VC的DLL
  17. java瀑布图表,瀑布图的完美解决方案 [Excel图表]
  18. 利用Deskpool 搭建 桌面云教室
  19. 初识云计算和DevOps
  20. JAVA导入/导出EXCEL文件,自定义校验,错误回写excel,使用简单快捷

热门文章

  1. weblogic服务器上类或者方法找不到的解决办法
  2. leetcode力扣647. 回文子串
  3. 浙大 PAT 甲级1009
  4. NetAug(网络增强)—Dropout的反面
  5. linux 进程退出原因,linux – 为什么waitpid不等待进程退出?
  6. G-TAD: Sub-Graph Localization for Temporal Action Detection
  7. 花书+吴恩达深度学习(九)优化方法之二阶近似方法(牛顿法, CG, BFGS, L-BFGS)
  8. 操作系统知识回顾(5)-内存管理
  9. VBS的开发利器---WMI信息绑定参考地址
  10. linux卸载htop,linux下 htop 工具简介