产生问题的原因是TCP不存在数据边界(粘包问题)

client.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#define BUF_SIZE 1024
void serErr(const char *message);
int main(int argc,char *argv[])
{int serSock;struct sockaddr_in serAddr;char message[BUF_SIZE];memset(message,0,sizeof(message));if(3!=argc) {printf("Usage : %s",argv[0]);exit(1);}/* serSock = socket(PE_INET,SOCK_STREAM,0); */serSock = socket(AF_INET,SOCK_STREAM,0);if(-1==serSock) {serErr("socket");}memset(&serAddr,0,sizeof(serAddr));serAddr.sin_family = AF_INET;//serAddr.sin_addr.s_addr = htonl(INADDR_ANY);//INADDR_ANY本机所有ip,htons htonl :将小端转换为大端(网络字节序)serAddr.sin_addr.s_addr = inet_addr(argv[1]);//将点分十进制转换为32位 inet_aton 也可serAddr.sin_port = htons(atoi(argv[2]));if(-1==connect(serSock,(struct sockaddr*)&serAddr,sizeof(serAddr))) {serErr("connet");}int len = 0;while(1){fputs("input message\n",stdout);fgets(message,BUF_SIZE,stdin);if(!strncmp(message,"quit\n",sizeof(message))){break;}write(serSock,message,strlen(message));len = read(serSock,message,BUF_SIZE-1);message[len] = 0;printf("message from server:\n%s\n",message);}close(serSock);return 0;
}void serErr(const char *message)
{fputs(message,stderr);fputc('\n',stderr);exit(1);
}

server.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#define BUF_SIZE 1024
void serErr(const char *message);
int main(int argc,char *argv[])
{int serSock;int clntSock;struct sockaddr_in serAddr;struct sockaddr_in clntAddr;socklen_t clntAddrSize;char message[BUF_SIZE];printf("start\n");if(2!=argc) {printf("Usage : %s",argv[0]);exit(1);}/* serSock = socket(PE_INET,SOCK_STREAM,0); */serSock = socket(AF_INET,SOCK_STREAM,0);if(-1==serSock) {serErr("socket");}memset(&serAddr,0,sizeof(serAddr));serAddr.sin_family = AF_INET;serAddr.sin_addr.s_addr = htonl(INADDR_ANY);//INADDR_ANY本机所有ip,htons htonl :将小端转换为大端(网络字节序)serAddr.sin_port = htons(atoi(argv[1]));if(-1==bind(serSock,(struct sockaddr*)&serAddr,sizeof(serAddr))) {serErr("bind");}if(-1==listen(serSock,15)) {serErr("listen");}clntAddrSize = sizeof(clntAddr);int  str_len = 0;for(int i=0;i<5;++i){clntSock = accept(serSock,(struct sockaddr*)&clntAddr,&clntAddrSize);//accept 后面2个参数保存了客户端的信息:printf("clntAddr = %d,%d,%d\n",clntAddr.sin_addr.s_addr,clntAddr.sin_port,clntAddr.sin_family);if(-1==clntSock) {serErr("accept");}else {printf("connect %d\n",i+1);}while((str_len=read(clntSock,message,BUF_SIZE))!=0){write(clntSock,message,str_len);}close(clntSock);}close(serSock);return 0;
}void serErr(const char *message)
{fputs(message,stderr);fputc('\n',stderr);exit(1);
}

02回声服务端与客户端(瑕疵版)相关推荐

  1. DotNetty 高性能NIO通讯模型 服务端和客户端案例版

    Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的高性能客户端/服务器 通讯框架. Netty的优势: 并发高 传输快 封装好 还有一个叫做 内存零 ...

  2. 搭建阿里云服务器,实现服务端与客户端socket数据通信(详细版)

    文章目录 0 引言 1. 注册账号.免费申请阿里云服务器 2. 配置服务器环境 3. 远程连接服务器 4. 给服务器传输文件 5. 可能出现的问题 0 引言 最近在做一个项目,需要用到一个客户端(电脑 ...

  3. 高仿android 版微信(服务端,客户端都有)

    做开发已经很多年,突然心血来潮,想仿微信做个即时聊天的应用练练手. 话不多说,说说实现方式,后端采用.net web api ,轻车熟路,推送基于个推,用.net consoleApp 实现.目前实现 ...

  4. 《Netty权威指南 第2版》学习笔记(1)---服务端与客户端开发入门

    前言 Netty权威指南中以时间服务器为入门案例,演示了如何通过Netty完成了服务端与客户端之间的交互过程. 在开始使用Netty开发之前,先回顾一下使用NIO进行服务端开发的步骤. 创建Serve ...

  5. [企业化NET]Window Server 2008 R2[3]-SVN 服务端 和 客户端 基本使用

    1.  服务器基本安装即问题解决记录      √ 2.  SVN环境搭建和客户端使用 2.1  服务端 和 客户端 安装    √ 2.2  项目建立与基本使用     √ 2.3  基本冲突解决, ...

  6. 【★更新★】高性能 Windows Socket 服务端与客户端组件(HP-Socket v2.0.1 源代码及测试用例下载)...

    HP-Socket 以前为某大型通信项目开发了一套通用 Windows Socket TCP 底层通信组件,组件代号为 HP-Socket.现在把 HP-Socket 的所有代码向大众公开,希望能对大 ...

  7. 服务器响应回调函数,解决有关flask-socketio中服务端和客户端回调函数callback参数的问题(全网最全)...

    由于工作当中需要用的flask_socketio,所以自己学习了一下如何使用,查阅了有关文档,当看到回调函数callback的时候,发现文档里都描述的不太清楚,最后终于琢磨出来了,分享给有需要的朋友 ...

  8. OSI七层、TCP/IP五层、UDP、TCP的socket编程(服务端及客户端)、字节序转换、多进程以及多线程服务端的实现

    1.网络以覆盖范围划分:局域网/城域网/广域网   互联网/因特网   以太网/令牌环网--组网方式 2.在网络中必须能够为一表示每一台主机,才能实现点到点的精确通信            IP地址: ...

  9. Windows系统中使用SSH服务端和客户端

    Windows 下SSH 使用概览 Linux 系统一般自带SSH 的服务端和客户端, Windows系统在Windows 10(1809) 和 Windows Server 2019开始自带了Ope ...

最新文章

  1. php语言中 类的关键词是,c语言中的关键字有哪些类型?
  2. html3d样式,CSS+HTML3D文字效果
  3. 直播预告 | 如何在有限数据下实现资讯类网站海量信息自动分类
  4. 【Python】APScheduler定时任务
  5. 串口服务器应用领域及应用方案详解
  6. 小汤学编程之JavaScript学习day01——认识JS、JS基础语法
  7. 版本控制-代码和文档等用SVN管理
  8. 洛谷 桶哥的问题——吃桶——题解
  9. 中国好SaaS广州站:Fundebug勇夺两大奖项
  10. 歌曲转调之后和弦如何转换
  11. Verilog中repeat的用法
  12. Matlab 动态输入变量和嵌套函数、匿名函数
  13. 简述Java中封装,继承,多态的理解
  14. 【ShardingSphere技术专题】「ShardingJDBC实战阶段」SpringBoot之整合ShardingJDBC实现分库分表(JavaConfig方式)
  15. 梅科尔工作室-罗森-鸿蒙笔记一
  16. 使用jQuery加DIV实现可以动态添加的金字塔结构
  17. Linux内核MTD子系统七之Flash 存储器接口标准:CFI和JEDEC
  18. 【Python数列、数列和问题】
  19. Tomcat优化详解
  20. 关于PROE绘图个人记录

热门文章

  1. 字典是什么,如何获取字典中的值
  2. C语言scanf函数
  3. 【已阅】printf,echo,cat指令与输出重定向>,输入重定向<与追加重定向>>等
  4. 1.Ubuntu Linux 简介
  5. 侯为贵:通信老兵的华丽谢幕
  6. 华为云CDN节点扩增力度加大,构建全球智能边缘网络
  7. linux开发stm32和keil的区别,STM32cubeIDE 和 KEIL 的区别
  8. C# TreeView控件说明
  9. 百练#2802小游戏
  10. 揭阳市、汕尾市楹联学会举行上巳雅集暨“大洋杯” 征联颁奖典礼