回声服务器的实现

结合我们之前对socket函数的分析,现在做一个最简单的回声服务器(由客户端输入一串字符,再由服务器端转换成大写字符回显给客户端)

特别说明:为了突出代码的逻辑部分,博主就没有在写有关的判断代码了,读者有兴趣可以根据各个函数的返回值自行添加错误判断函数。
server.c

#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<ctype.h>#define SERVER_PORT 6666
#define MAXLINE 100
int main(void){/*定义  server端套接字文件描述符:sfdclient套接字文件描述符:cfdread函数读取到的字符数:n */int sfd,cfd,n;/* server端地址定义(包含IP、PORT、协议族)暂未指定:server_addrclient端地址定义(包含IP、PORT、协议族)不需要再server.c定义,accept函数会自动填充*/struct sockaddr_in server_addr,client_addr;socklen_t  client_len;//为 accept函数第三个参数做准备char buf[MAXLINE];//接收client端发来的字符的缓冲区/*bzero:将server端置空,为了给后续的IP、PORT、协议族赋值所用后续操作是为了 bind函数绑定IP、PORT和协议族的固定操作。*/bzero(&server_addr,sizeof(server_addr));  server_addr.sin_family = AF_INET;//IPV4server_addr.sin_port = htons(SERVER_PORT);//转换为网络字节序server_addr.sin_addr.s_addr = htonl(INADDR_ANY);sfd = socket(AF_INET,SOCK_STREAM,0);bind(sfd,(struct sockaddr *)&server_addr,sizeof(server_addr));listen(sfd,21);while(1){client_len = sizeof(client_addr);cfd = accept(sfd,(struct sockaddr *)&client_addr,&client_len);//accept调用和会给server端返回一个和client端连接好的socket。n = read(cfd,buf,MAXLINE);    for(int i=0;i<n;i++){buf[i] = toupper(buf[i]);}write(cfd,buf,n);close(cfd);}return 0;}

client.c

#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<ctype.h>#define SERVER_PORT 6666
#define MAXLINE 100
int main(void) {int sfd, n;struct sockaddr_in server_addr;char buf[MAXLINE];bzero(&server_addr, sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_port = htons(SERVER_PORT);inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr);sfd = socket(AF_INET, SOCK_STREAM, 0);connect(sfd, (struct sockaddr*)&server_addr, sizeof(server_addr));while (1) {fgets(buf, sizeof(buf), stdin);write(sfd, buf, strlen(buf));n = read(sfd, buf, sizeof(buf));write(STDOUT_FILENO, buf, n);}close(sfd);return 0;}

编译代码:

服务器端
gcc server.c -o server
./server
客户端
gcc client.c -o client
./client

测试结果:
在这里插入图片描述

这这部分代码不再详述,想知道原因的可以去我的分类专栏 高性能服务器开发——008.一个简单的网络服务器开发----回声服务器对着部分做了详细的说明

socket编程之回声服务器相关推荐

  1. socket编程之回声服务器函数的陷阱

    由connect函数使用不当导致的小错误 话不多说先看代码: server.c #include<stdio.h> #include<ctype.h> #include< ...

  2. 用JAVA SOCKET编程,读服务器几个字符,再写入本地显示

    Server: package cn.itcast.framework.socket;import java.io.BufferedReader; import java.io.IOException ...

  3. Android Socket编程android端服务器和客户端的实现

     Android Socket编程android端服务器和客户端的实现       其实和java实现的差不多,或本质是用java实现的,但由于android有自身的独特性,所以还是有一些要注意的点: ...

  4. java socket 编程 客户机服务器_Java Socket编程服务器响应客户端实例代码

    通过输入流来读取客户端信息,相应的时候通过输出流来实现. 服务端类的代码: import java.io.BufferedReader; import java.io.IOException; imp ...

  5. socket编程-客户端向服务器发送字符串,传文件

    功能:分为客户端和服务器,client可向server传送字符串,传送文件. 环境:Ubuntu 编译方法: server.c: gcc  –o server server.c client.c:   ...

  6. 码农翻身讲网络3:从Socket编程到HTTP服务器

    小白科普:从输入网址到最后浏览器呈现页面内容,中间发生了什么?(HTTP请求) 原创: 老刘 码农翻身 1月2日 1前言 这篇文章是应网友之邀所写,主要描述一下我们访问网站时, 从输入网址到最后浏览器 ...

  7. socket编程和并发服务器

    socket这个词可以表示很多概念: 在TCP/IP协议中,"IP地址+TCP或UDP端口号"唯一标识网络通讯中的一个进程,"IP地址+端口号"就称为socke ...

  8. socket编程实现回声客户端

    所谓"回声",是指客户端向服务器发送一条数据,服务器再将数据原样返回给客户端,就像声音一样,遇到障碍物会被"反弹回来". 对!客户端也可以使用 write() ...

  9. 网络socket编程实现并发服务器——多线程编程

    一.多线程简介 1.什么是线程? 线程在操作系统原理中是这样描述的:线程是进程的一条执行路径.线程在Unix系统下,通常被称为轻量级的进程,线程虽然不是进程,但却可以看作是Unix进程的表亲,所有的线 ...

最新文章

  1. python until怎么用不了_为何你还不懂得如何使用Python协程
  2. python里面的之前打过的记忆信息-Python关键语句备忘录,拯救你的记忆
  3. 在刷一道题,数字回文,以以前做过,刚好昨天也做了一个类似的题,数字反转,原理有点像-----9. Palindrome Number...
  4. python面向编程:类继承、继承案例、单继承下属性查找、super方法
  5. 华为5G折叠屏手机Mate X 重新入网,即将上市!
  6. 【算法】BloomFilter 与 CuckooFilter
  7. tensorflow 实现打印预训练的模型中的变量名和变量值
  8. 使用modscan32工具踩的坑
  9. Watir的操作使用
  10. html百分比设置高度的原理,css height百分比 css高度百分比使用教程
  11. 欢迎来访个人网站——阳光日志
  12. 橡胶材料特性和本构关系【转】_51CAE_新浪博客
  13. Python用最简单的代码画出一箭穿心
  14. Ubuntu下JAVA SDK安装
  15. Bootstrap(三) 网格系统
  16. 【五一创作】使用Scala二次开发Spark3.3.0实现对MySQL的upsert操作
  17. python手动安装jieba库 No module named ‘jieba‘
  18. c语言数组越界也太难了吧,跨函数越界啥意思?
  19. 实验9、键盘扫描及数码管显示实验
  20. 北航计算机就业2018,2020年考研:北京航空航天大学2018年的毕业生就业情况怎样?北航就业前景分析...

热门文章

  1. javascript控制页面控件隐藏显示的两种方法
  2. qt如何把父窗口的变量传给子窗口_子窗体显示的时候怎么让父窗体阻塞并且子窗体可以任意移动?...
  3. 199 美元的 iPhone 都可以想了,时代真的变了?
  4. Facebook 有序队列服务设计原理和高性能浅析
  5. 一文带你了解如何排查内存泄漏导致的页面卡顿现象
  6. 前端的魔爪已经伸到后端了,颤抖吧后端!
  7. Git提交错了不用慌,这三招帮你修改记录
  8. 通过代码学 Sutton 强化学习:SARSA、Q-Learning 时序差分算法训练 CartPole
  9. 进击的小程序:品牌自营GMV同比增长210%,这些行业增速最快……
  10. iPhone11 全线降价;哈啰出行否认大量裁员;LineageOS 17.1 发布| 极客头条