02回声服务端与客户端(瑕疵版)
产生问题的原因是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回声服务端与客户端(瑕疵版)相关推荐
- DotNetty 高性能NIO通讯模型 服务端和客户端案例版
Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的高性能客户端/服务器 通讯框架. Netty的优势: 并发高 传输快 封装好 还有一个叫做 内存零 ...
- 搭建阿里云服务器,实现服务端与客户端socket数据通信(详细版)
文章目录 0 引言 1. 注册账号.免费申请阿里云服务器 2. 配置服务器环境 3. 远程连接服务器 4. 给服务器传输文件 5. 可能出现的问题 0 引言 最近在做一个项目,需要用到一个客户端(电脑 ...
- 高仿android 版微信(服务端,客户端都有)
做开发已经很多年,突然心血来潮,想仿微信做个即时聊天的应用练练手. 话不多说,说说实现方式,后端采用.net web api ,轻车熟路,推送基于个推,用.net consoleApp 实现.目前实现 ...
- 《Netty权威指南 第2版》学习笔记(1)---服务端与客户端开发入门
前言 Netty权威指南中以时间服务器为入门案例,演示了如何通过Netty完成了服务端与客户端之间的交互过程. 在开始使用Netty开发之前,先回顾一下使用NIO进行服务端开发的步骤. 创建Serve ...
- [企业化NET]Window Server 2008 R2[3]-SVN 服务端 和 客户端 基本使用
1. 服务器基本安装即问题解决记录 √ 2. SVN环境搭建和客户端使用 2.1 服务端 和 客户端 安装 √ 2.2 项目建立与基本使用 √ 2.3 基本冲突解决, ...
- 【★更新★】高性能 Windows Socket 服务端与客户端组件(HP-Socket v2.0.1 源代码及测试用例下载)...
HP-Socket 以前为某大型通信项目开发了一套通用 Windows Socket TCP 底层通信组件,组件代号为 HP-Socket.现在把 HP-Socket 的所有代码向大众公开,希望能对大 ...
- 服务器响应回调函数,解决有关flask-socketio中服务端和客户端回调函数callback参数的问题(全网最全)...
由于工作当中需要用的flask_socketio,所以自己学习了一下如何使用,查阅了有关文档,当看到回调函数callback的时候,发现文档里都描述的不太清楚,最后终于琢磨出来了,分享给有需要的朋友 ...
- OSI七层、TCP/IP五层、UDP、TCP的socket编程(服务端及客户端)、字节序转换、多进程以及多线程服务端的实现
1.网络以覆盖范围划分:局域网/城域网/广域网 互联网/因特网 以太网/令牌环网--组网方式 2.在网络中必须能够为一表示每一台主机,才能实现点到点的精确通信 IP地址: ...
- Windows系统中使用SSH服务端和客户端
Windows 下SSH 使用概览 Linux 系统一般自带SSH 的服务端和客户端, Windows系统在Windows 10(1809) 和 Windows Server 2019开始自带了Ope ...
最新文章
- php语言中 类的关键词是,c语言中的关键字有哪些类型?
- html3d样式,CSS+HTML3D文字效果
- 直播预告 | 如何在有限数据下实现资讯类网站海量信息自动分类
- 【Python】APScheduler定时任务
- 串口服务器应用领域及应用方案详解
- 小汤学编程之JavaScript学习day01——认识JS、JS基础语法
- 版本控制-代码和文档等用SVN管理
- 洛谷 桶哥的问题——吃桶——题解
- 中国好SaaS广州站:Fundebug勇夺两大奖项
- 歌曲转调之后和弦如何转换
- Verilog中repeat的用法
- Matlab 动态输入变量和嵌套函数、匿名函数
- 简述Java中封装,继承,多态的理解
- 【ShardingSphere技术专题】「ShardingJDBC实战阶段」SpringBoot之整合ShardingJDBC实现分库分表(JavaConfig方式)
- 梅科尔工作室-罗森-鸿蒙笔记一
- 使用jQuery加DIV实现可以动态添加的金字塔结构
- Linux内核MTD子系统七之Flash 存储器接口标准:CFI和JEDEC
- 【Python数列、数列和问题】
- Tomcat优化详解
- 关于PROE绘图个人记录