文章目录

  • 1 简单回声服务器的实现

1 简单回声服务器的实现

实现非常非常简单,而且没啥实用价值,代码如下:

server.c:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <ctype.h>
#include <arpa/inet.h>#define SERVER_PORT 666int main(void){int sock;//代表信箱struct sockaddr_in server_addr;//1.美女创建信箱sock = socket(AF_INET, SOCK_STREAM, 0);//2.清空标签,写上地址和端口号bzero(&server_addr, sizeof(server_addr));server_addr.sin_family = AF_INET;//选择协议族IPV4server_addr.sin_addr.s_addr = htonl(INADDR_ANY);//监听本地所有IP地址server_addr.sin_port = htons(SERVER_PORT);//绑定端口号//实现标签贴到收信得信箱上bind(sock, (struct sockaddr *)&server_addr,  sizeof(server_addr));//把信箱挂置到传达室,这样,就可以接收信件了listen(sock, 128);//万事俱备,只等来信printf("等待客户端的连接\n");int done =1;while(done){struct sockaddr_in client;int client_sock, len;char client_ip[64];char buf[256];socklen_t  client_addr_len;client_addr_len = sizeof(client);client_sock = accept(sock, (struct sockaddr *)&client, &client_addr_len);//打印客服端IP地址和端口号printf("client ip: %s\t port : %d\n",inet_ntop(AF_INET, &client.sin_addr.s_addr,client_ip,sizeof(client_ip)),ntohs(client.sin_port));/*读取客户端发送的数据*/len = read(client_sock, buf, sizeof(buf)-1);buf[len] = '\0';printf("receive[%d]: %s\n", len, buf);//转换成大写for(i=0; i<len; i++){/*if(buf[i]>='a' && buf[i]<='z'){buf[i] = buf[i] - 32;}*/buf[i] = toupper(buf[i]);}len = write(client_sock, buf, len);printf("finished. len: %d\n", len);close(client_sock);}close(sock);return 0;
}

client.c:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>#define SERVER_PORT 666
#define SERVER_IP  "127.0.0.1"int main(int argc, char *argv[]){int sockfd;char *message;struct sockaddr_in servaddr;int n;char buf[64];if(argc != 2){fputs("Usage: ./echo_client message \n", stderr);exit(1);}message = argv[1];printf("message: %s\n", message);sockfd = socket(AF_INET, SOCK_STREAM, 0);memset(&servaddr, '\0', sizeof(struct sockaddr_in));servaddr.sin_family = AF_INET;inet_pton(AF_INET, SERVER_IP, &servaddr.sin_addr);servaddr.sin_port = htons(SERVER_PORT);connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));write(sockfd, message, strlen(message));n = read(sockfd, buf, sizeof(buf)-1);if(n>0){buf[n]='\0';printf("receive: %s\n", buf);}else {perror("error!!!");}printf("finished.\n");close(sockfd);return 0;
}

参考资料:

  1. C/C++从入门到精通-高级程序员之路【奇牛学院】

简单回声服务器的实现相关推荐

  1. 008.一个简单的网络服务器开发----回声服务器

    目录 简单的回声服务器实现 项目需求 技术分析 博主相关的技术博客 网络编程之 socket编程 网络编程函数小总结与初识socket 网络编程之bind()的未解之谜 网络编程之 字节序和深入理解b ...

  2. 012.成型版回声服务器

    目录 带错误处理的回声服务器的实现 server.cpp client.cpp error_handling.cpp error_handling.h 遇到的问题,自定义函数显示未定义的引用. 问题分 ...

  3. 010.第一个回声服务器可能遇到的问题——connect函数

    目录 由connect函数使用不当导致的小错误 server.c client.c 最终效果: 新server.c:主要用于排错 在回顾connect函数: 完整博客: 由connect函数使用不当导 ...

  4. socket编程之回声服务器

    回声服务器的实现 结合我们之前对socket函数的分析,现在做一个最简单的回声服务器(由客户端输入一串字符,再由服务器端转换成大写字符回显给客户端) 特别说明:为了突出代码的逻辑部分,博主就没有在写有 ...

  5. nodejs php web,nodejs实现的简单web服务器功能示例

    本文实例讲述了nodejs实现的简单web服务器功能.分享给大家供大家参考,具体如下: 前端js代码: $.ajax({ url:'http://192.168.0.114:3000',//服务器地址 ...

  6. C++回声服务器_3-UDP版本

    这次我们实现一个UDP版本的回声服务器. 用于传输数据的函数 UDP套接字不会像TCP套接字那样保持连接状态,因此每次传输数据都要添加目标地址信息. 用于传输数据的函数: 发送数据到目标服务器. #i ...

  7. 使用Netty实现的一个简单HTTP服务器

    为什么80%的码农都做不了架构师?>>>    使用Netty实现的一个简单HTTP服务器 1.HttpServer,Http服务启动类,用于初始化各种线程和通道 public cl ...

  8. 基于epoll实现一个IO多路复用的回声服务器

    任务: 实现一个TCP server的回声服务器,功能是将客户端发送的消息原样返回,应用epoll处理事件循环实现IO多路复用.借此任务理解IO多路复用应用的开发模式. 参考资料: http://ma ...

  9. shell编程服务器维护,简单监测服务器的shell脚本

    搜索热词 1.编写shell脚本如下: #!/bin/bash # chkconfig: 2345 10 90 # description:监测linux服务器cpu.内存.磁盘 #cpu平均负载阀值 ...

最新文章

  1. TensorRT-安装-使用
  2. 2022-2028年中国服务器行业投资分析及前景预测报告
  3. java parsedouble valueof_java String.valueOf() 方法的使用
  4. 使用CocoaPods出现 The `master` repo requires CocoaPods 0.32.1 - 问题解决
  5. 6.关于QT中的内存管理,动态的制作,动态库的调用,静态库的制作
  6. dos命令行设置网络优先级_计算机网络故障及其维修方法
  7. SYBASE的管理(三)
  8. Linux系统安装证书(ubuntu、centos7)
  9. vcftools报错:Writing PLINK PED and MAP files ... Error: Could not open temporary file.解决方案
  10. 分布式锁的过期时间设置多长合适_科普:Redis 分布式锁进化史(解读 + 缺陷分析)...
  11. Blog访问量提升秘笈
  12. 嵌入式硬件入门——EEPROM(AT24C02+I2C协议)
  13. 用aspose转换文档成PDF导致中文变成方框
  14. System.gc()介绍
  15. Linux详细到爆炸的一篇文章
  16. mysql姓名相同成绩不同_MySQL数据库
  17. 计算机课导入语,信息技术课的提问和导入技巧
  18. Jenkins安装以及邮件配置
  19. python自学网站免费-推荐几个适合小白学习Python的免费网站
  20. 单光感pid巡线_乐高4种单光感巡线逻辑

热门文章

  1. python中文注释缩进_Python入门学习之注释、行与缩进
  2. 【控制】《自动控制原理》胡寿松老师-第2章-控制系统的数学模型
  3. 2.11 计算机视觉现状-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  4. Floats and marginpars not allowed inside `multicols' Unknown float option `H'. 基于LaTex+VSCode+MAC
  5. Android4.0与2.3的差异
  6. 手把手教你DIY最便宜的 arduino 温湿度计,详细图文视频教程
  7. 华为鸿蒙系统内部消息,华为鸿蒙系统内部曝光,并且将于年底发布?网友:还能再假点?...
  8. 好好学python·运算符和流程控制
  9. 【贪心】Codeforces Round #436 (Div. 2) D. Make a Permutation!
  10. iTerm的安装以及配置Oh My Zsh