例子:大写转小写。
注意:代码都是运行在Linux内核中。
服务器端:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <arpa/inet.h>
#include <ctype.h>
int main()
{// 1、创建套接字int lfd = socket(AF_INET, SOCK_STREAM, 0);// 2、绑定IP和端口号struct sockaddr_in server_addr; // 创建结构体server_addr.sin_family = AF_INET; // 指定IPv4server_addr.sin_port = htons(8888); // 将端口号转换为网络字节序server_addr.sin_addr.s_addr = htonl(INADDR_ANY); // 将本地任意IP转为网络字节序bind(lfd, (struct sockaddr*)&server_addr, sizeof(server_addr)); // 绑定,注意强转
// 3、监听listen(lfd,128); // 上限128// 4、阻塞等待客户端链接(获得一个新的指向客户端文件描述符)
struct sockaddr_in client_addr; // 传入参数:要先定义,然后传入
socklen_t client_addr_len = sizeof(client_addr); // 传入传出参数:要先定义赋值,然后传入
int cfd = accept(lfd, (struct sockaddr*)&client_addr, &client_addr_len); // 指向客户端
// 输出客户端信息char ip[256] = {0}; // 用于存储IP字符串printf("client IP: %s 端口号: %d\n", inet_ntop(AF_INET, &client_addr.sin_addr.s_addr, ip, sizeof(ip)),ntohs(client_addr.sin_port) ); // 2个函数的返回值分别是IP和端口号// 以下为通信char buf[256];while(1) // 实现循环操作
{// 读取客户端传来的内容int n = read(cfd, buf, sizeof(buf)); // 返回值是读到的字节数(字母个数)// 转换字母for(int i = 0; i < n; i++)buf[i] = toupper( buf[i] ); // 写回给客户端write(cfd, buf, n);}//关闭close(lfd);close(cfd);return 0;
}

客户端:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <string.h>
int main()
{// 创建客户端socketint cfd = socket(AF_INET, SOCK_STREAM, 0);// 客户端应该绑定bind自己的IP和端口,但也可以不绑定,系统会帮助做“隐式绑定”// 注意:服务器可以做隐式绑定吗?
// 答: 不可以,因为隐式绑定,服务器的IP和端口不固定,客户端不知道该连接哪// 链接服务器struct sockaddr_in server_addr; // 因为要链接服务器,存储的服务器的IP地址和端口号// 指定服务器的地址信息server_addr.sin_family = AF_INET;server_addr.sin_port = htons(8888); inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr.s_addr); // 转 网络字节序
socklen_t addrlen = sizeof(server_addr); // 指定服务器的地址长度connect(cfd, (struct sockaddr*)&server_addr, addrlen); // 链接服务器char buf[256];while(1){// 向服务器传数据fgets(buf, sizeof(buf), stdin); // 从键盘输入,存入buf// 注意:fgets 特性,一直接收键盘输入,以回车作为结尾,然后自动给加\0// 举例 hello 经过fgets 存入buf的是 “hello\n\o”write(cfd, buf, strlen(buf)); // 因此,此处用strlen,而不是sizeof// 服务器处理后,客户端读取数据int n = read(cfd, buf, sizeof(buf));// 写入屏幕write(STDOUT_FILENO, buf, n);}close(cfd);return 0;
}

利用套接字实现 CS 模型相关推荐

  1. 套接字I/O模型之WSAEventSelect

    今天我又学习了一种新的套接字I/O模型------WSAEventSelect,他与WSAAsyncSelect一样也是一种异步事件通知模型,不同的是WSAAsyncSelect是与窗口句柄关联在一起 ...

  2. 套接字I/O模型-重叠I/O

    重叠模型的基本设计原理是让应用程序使用重叠的数据结构,一次投递一个或多个WinsockI/O请求.针对那些提交的请求,在它们完成之后,应用程序可为它们提供服务.模型的总体设计以Windows重叠I/O ...

  3. Windows套接字I/O模型(2) -- Select模型

    一.Select模型介绍 套接字I/O Select模型的"中心思想"便是利用select函数,实现对I/O的管理.利用select函数判断套接字(一个或多个)上是否存在数据,或者 ...

  4. Windsock套接字I/O模型学习 --- 第二章

    1. select模型 select模型主要借助于apiselect来实现,所以先介绍一下select函数 int select( int nfds, // 忽略,仅是为了与 Berkeley 套接字 ...

  5. 套接字I/O模型-WSAEventSelect(转载)

    和WSAAsyncSelect类似,它也允许应用程序在一个或多个套接字上,接收以事件为基础的网络事件通知. 该模型最主要的区别是在于网络事件是由对象句柄完成的,而不是通过窗口例程完成.事件通知 事件通 ...

  6. 套接字 I/O 模型 WSAEvent

    和WSAAsyncSelect类似,它也允许应用程序在一个或多个套接字上,接收以事件为基础的网络事件通知. 该模型最主要的区别是在于网络事件是由对象句柄完成的,而不是通过窗口例程完成. 事件通知 事件 ...

  7. 套接字I/O模型-WSAEventSelect

    和WSAAsyncSelect类似,它也允许应用程序在一个或多个套接字上,接收以事件为基础的网络事件通知. 该模型最主要的区别是在于网络事件是由对象句柄完成的,而不是通过窗口例程完成. 事件通知 事件 ...

  8. Windows套接字I/O模型(4) -- WSAEventSelect模型

    一.WSAEventSelect模型介绍 WSAEventSelect模型和WSAAsyncSelect模型类似,它也允许应用程序在一个或多个套接字上面,接收以事件为基础的网络事件通知.该模型和WSA ...

  9. 利用套接字实现进程通信一例

    下面程序实现的功能是:客户端将从键盘输入的内容发送给服务器,然后服务器在将受到的数据原封不动的发给客户端. 先看看服务器端的程序: 1: /* 2: * ======================= ...

最新文章

  1. SQL数据库隐藏服务器后需要在连接字符串增加端口号,(provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)]...
  2. C#学习笔记(一)变量 常量 基本数据类型 其它
  3. php采集网页,phpQuery采集网页实现代码实例
  4. 6-2-1:STL之string——string的快速入门、常用接口
  5. 假如啤酒只有七天生命
  6. 用C#实现软件自动更新思路
  7. 公钥加密数字签名证书的原理总结
  8. 【愚公系列】2022年02月 阿里云 无影云桌面产品测评
  9. mysql免安装迁移_Mysql 免安装配置并迁移数据库
  10. 利用python画折线图
  11. 64位计算机连不上打印机,WIN1064位网络打印机已成功连接,无法打印.
  12. Ubuntu18.04个人常用工具软件
  13. 【Linux】物理CPU、CPU核数、逻辑CPU、超线程
  14. DGIOT智慧农业案例分享
  15. 你也深受脂肪团的困扰吗?快来看看吧
  16. [今日干货]一个吸粉效果也不错的APP
  17. java.lang.IllegalArgumentException: object is not an instance of declaring class
  18. 多睡觉,能减肥,芝加哥大学最新研究:每天多睡1小时,等于少吃一根炸鸡腿...
  19. Question Answering over Freebase with Multi-Column Convolutional Neural Net论文解析
  20. ESP32一键配网------smartconfig

热门文章

  1. 乘风破浪的Seq2Seq模型:在事件抽取上的应用
  2. ACL 2021 | 复旦大学邱锡鹏组:面向不同NER子任务的统一生成框架
  3. BERT原理、代码、相关模型、精调技巧,看这个就够了
  4. GELU的两个初等函数近似是怎么来的?
  5. SIGIR 2019 | 基于人类阅读行为模式的机器阅读理解
  6. Self-Attention GAN 中的 self-attention 机制
  7. AI Challenger 2018 机器翻译参赛总结
  8. Fibonacci数列 矩阵快速幂
  9. Spring Security OAuth2——自定义OAuth2第三方登录(Gitee)并与UsernamePassword登录关联解决方案
  10. 汇编语言——计算Z=(W * X)/ (Y+6),R=余数