socket编程之回声服务器
回声服务器的实现
结合我们之前对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编程之回声服务器相关推荐
- socket编程之回声服务器函数的陷阱
由connect函数使用不当导致的小错误 话不多说先看代码: server.c #include<stdio.h> #include<ctype.h> #include< ...
- 用JAVA SOCKET编程,读服务器几个字符,再写入本地显示
Server: package cn.itcast.framework.socket;import java.io.BufferedReader; import java.io.IOException ...
- Android Socket编程android端服务器和客户端的实现
Android Socket编程android端服务器和客户端的实现 其实和java实现的差不多,或本质是用java实现的,但由于android有自身的独特性,所以还是有一些要注意的点: ...
- java socket 编程 客户机服务器_Java Socket编程服务器响应客户端实例代码
通过输入流来读取客户端信息,相应的时候通过输出流来实现. 服务端类的代码: import java.io.BufferedReader; import java.io.IOException; imp ...
- socket编程-客户端向服务器发送字符串,传文件
功能:分为客户端和服务器,client可向server传送字符串,传送文件. 环境:Ubuntu 编译方法: server.c: gcc –o server server.c client.c: ...
- 码农翻身讲网络3:从Socket编程到HTTP服务器
小白科普:从输入网址到最后浏览器呈现页面内容,中间发生了什么?(HTTP请求) 原创: 老刘 码农翻身 1月2日 1前言 这篇文章是应网友之邀所写,主要描述一下我们访问网站时, 从输入网址到最后浏览器 ...
- socket编程和并发服务器
socket这个词可以表示很多概念: 在TCP/IP协议中,"IP地址+TCP或UDP端口号"唯一标识网络通讯中的一个进程,"IP地址+端口号"就称为socke ...
- socket编程实现回声客户端
所谓"回声",是指客户端向服务器发送一条数据,服务器再将数据原样返回给客户端,就像声音一样,遇到障碍物会被"反弹回来". 对!客户端也可以使用 write() ...
- 网络socket编程实现并发服务器——多线程编程
一.多线程简介 1.什么是线程? 线程在操作系统原理中是这样描述的:线程是进程的一条执行路径.线程在Unix系统下,通常被称为轻量级的进程,线程虽然不是进程,但却可以看作是Unix进程的表亲,所有的线 ...
最新文章
- python until怎么用不了_为何你还不懂得如何使用Python协程
- python里面的之前打过的记忆信息-Python关键语句备忘录,拯救你的记忆
- 在刷一道题,数字回文,以以前做过,刚好昨天也做了一个类似的题,数字反转,原理有点像-----9. Palindrome Number...
- python面向编程:类继承、继承案例、单继承下属性查找、super方法
- 华为5G折叠屏手机Mate X 重新入网,即将上市!
- 【算法】BloomFilter 与 CuckooFilter
- tensorflow 实现打印预训练的模型中的变量名和变量值
- 使用modscan32工具踩的坑
- Watir的操作使用
- html百分比设置高度的原理,css height百分比 css高度百分比使用教程
- 欢迎来访个人网站——阳光日志
- 橡胶材料特性和本构关系【转】_51CAE_新浪博客
- Python用最简单的代码画出一箭穿心
- Ubuntu下JAVA SDK安装
- Bootstrap(三) 网格系统
- 【五一创作】使用Scala二次开发Spark3.3.0实现对MySQL的upsert操作
- python手动安装jieba库 No module named ‘jieba‘
- c语言数组越界也太难了吧,跨函数越界啥意思?
- 实验9、键盘扫描及数码管显示实验
- 北航计算机就业2018,2020年考研:北京航空航天大学2018年的毕业生就业情况怎样?北航就业前景分析...
热门文章
- javascript控制页面控件隐藏显示的两种方法
- qt如何把父窗口的变量传给子窗口_子窗体显示的时候怎么让父窗体阻塞并且子窗体可以任意移动?...
- 199 美元的 iPhone 都可以想了,时代真的变了?
- Facebook 有序队列服务设计原理和高性能浅析
- 一文带你了解如何排查内存泄漏导致的页面卡顿现象
- 前端的魔爪已经伸到后端了,颤抖吧后端!
- Git提交错了不用慌,这三招帮你修改记录
- 通过代码学 Sutton 强化学习:SARSA、Q-Learning 时序差分算法训练 CartPole
- 进击的小程序:品牌自营GMV同比增长210%,这些行业增速最快……
- iPhone11 全线降价;哈啰出行否认大量裁员;LineageOS 17.1 发布| 极客头条