ACE_linux:TCP通信
1.涉及类
ACE_INET_Addr//ACE网络地址
ACE_SOCK_Acceptor//ACE网络服务器
ACE_SOCK_Connector//ACE网络客户端
ACE_SOCK_Stream//ACE数据流
2.简介
TCP通讯
传输控制协议TCP(Transmission Control Protocol):TCP提供可靠的、面向连接的运输服务,用于高可靠性数据的传输。TCP协议的可靠性是指保证每个tcp报文能按照发送顺序到达客户端。
Tcp通信过程一般为如下步骤:
a) 服务器绑定端口,等待客户端连接。
b) 客户端通过服务器的ip和服务器绑定的端口连接服务器。
c) 服务器和客户端通过网络建立一条数据通路,通过这条数据通路进行数据交互。

3.示例代码
#include <iostream>
#include "ace/SOCK_Acceptor.h"
using namespace std; const int SERVER_PORT = ;
int main(int argc, char *argv[])
{
char buffer[];
ssize_t bc=; //接收的字节数
ACE_SOCK_Stream peer;//SOCK_IO,和客户端的数据通路
ACE_Time_Value timeout(, );//TCP接受超时时间 //Socket创建,绑定,监听
ACE_INET_Addr addr(SERVER_PORT);
ACE_SOCK_Acceptor acceptor;
if(acceptor.open(addr) != ) //绑定端口
{
cout<<"bind port fail!"<<endl;
return -;
}
cout<<"server ready. "<<endl; while(true)
{
if (acceptor.accept(peer) != -) //建立和客户端的连接
{
std::cout<<"client connect. "<<std::endl;
while(true)
{ if((bc=peer.recv(buffer,,&timeout))<=) //接收数据(超时或对端断开break)
{
break;
}
buffer[bc]='\0';
cout<<"[server rev]:>"<<buffer<<endl;
if(strcmp(buffer, "quit") == )
{
break;
}
do
{
cout<<"[server cin]:>";
cin.getline(buffer,);
}while(strlen(buffer)<=);
peer.send(buffer, strlen(buffer)); //发送数据 }
peer.close ();
}
} return ;
}
server.cpp
#include <ace/SOCK_Connector.h> #include <string>
#include <iostream>
using namespace std; const int SERVER_PORT = ; int main(int argc, char *argv[])
{
char buffer[];
ssize_t bc=; //接收的字节数 ACE_INET_Addr addr(,"192.168.237.128");
ACE_Time_Value timeout(,);
ACE_SOCK_Stream peer;
ACE_SOCK_Connector connector;
if(connector.connect(peer,addr,&timeout) != )
{
cout<<"connection failed !"<<endl;
return -;
}
cout<<"conneced !"<<endl; while(true)
{
do
{
cout<<"[client cin]:>";
cin.getline(buffer,);
}while(strlen(buffer)<=);
peer.send(buffer, strlen(buffer)); //发送数据 if((bc=peer.recv(buffer,,&timeout))<=) //接收数据(超时或对端断开break)
{
break;
}
buffer[bc]='\0';
cout<<"[client rev]:>"<<buffer<<endl;
if(strcmp(buffer, "quit") == )
{
break;
}
}
peer.close(); return ;
}
client.cpp
ok!

ACE_linux:TCP通信的更多相关文章
- TCP通信
//网络套接字编程实例,服务器端,TCP通信. #include <WinSock2.h> #pragma comment(lib,"ws2_32.lib") #inc ...
- 清晰易懂TCP通信原理解析(附demo、简易TCP通信库源码、解决沾包问题等)C#版
目录 说明 TCP与UDP通信的特点 TCP中的沾包现象 自定义应用层协议 TCPLibrary通信库介绍 Demo演示 未完成功能 源码下载 说明 我前面博客中有多篇文章讲到了.NET中的网络编程, ...
- JAVASE02-Unit010: 多线程基础 、 TCP通信
多线程基础 . TCP通信 * 当一个方法被synchronized修饰后,那么 * 该方法称为同步方法,即:多个线程不能同时 * 进入到方法内部执行. package day10; /** * 当多 ...
- 艺萌文件上传下载及自动更新系统(基于networkComms开源TCP通信框架)
1.艺萌文件上传下载及自动更新系统,基于Winform技术,采用CS架构,开发工具为vs2010,.net2.0版本(可以很容易升级为3.5和4.0版本)开发语言c#. 本系统主要帮助客户学习基于TC ...
- NetworkComms V3 使用TCP通信传递IList<T>类型的数据
客户端从服务器获取一组IList<T>类型的数据非常常见(通常从数据库中获取) 我们用NeworkComms V3来演示一下(NetworkcommsV2.x版本也同样支持) [ 使用pr ...
- [C语言]一个很实用的服务端和客户端进行TCP通信的实例
本文给出一个很实用的服务端和客户端进行TCP通信的小例子.具体实现上非常简单,只是平时编写类似程序,具体步骤经常忘记,还要总是查,暂且将其记下来,方便以后参考. (1)客户端程序,编写一个文件clie ...
- 异步tcp通信——APM.Server 消息推送服务的实现
消息推送服务 服务器推送目前流行就是私信.发布/订阅等模式,基本上都是基于会话映射,消息对列等技术实现的:高性能.分布式可以如下解决:会话映射可采用redis cluster等技术实现,消息对列可使用 ...
- 异步tcp通信——APM.ConsoleDemo
APM测试 俗话说麻雀虽小,五脏俱全.apm虽然简单,但是可以实现单机高性能消息推送(可以采用redis.kafka等改造成大型分布式消息推送服务器). 测试demo: using System; u ...
- 异步tcp通信——APM.Core 服务端概述
为什么使用异步 异步线程是由线程池负责管理,而多线程,我们可以自己控制,当然在多线程中我们也可以使用线程池.就拿网络扒虫而言,如果使用异步模式去实现,它使用线程池进行管理.异步操作执行时,会将操作丢给 ...
随机推荐
- Samba服务器配置参考链接
一步一学Linux与Windows共享文件Samba(很适合初学者,极力推荐): http://os.51cto.com/art/200709/56395.htm 由最简单的一个例子说起,匿名用户可读 ...
- 真机下, 如何在File Explorer里看data下的数据?
首先手机得Root , 你如果想单个单个的看, root explorer可以设置Permission Other下的两个权限点上就ok了. 如果想看到所有的, 即子目录也可以看到, 只需要adb r ...
- Programming Assignment 3: Collinear Points
The problem. Given a set of N distinct points in the plane, draw every (maximal) line segment that c ...
- java_有返回值线程_提前加载例子
package com.demo.test3; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionE ...
- java_java 利用JAX-RS快速开发RESTful 服务
JAX-RS(Java API for RESTful Web Services)同样也是JSR的一部分,详细规范定义见 https://jcp.org/en/jsr/detail?id=311 .从 ...
- C#轻型ORM框架PetaPoco试水
近端时间从推酷app上了解到C#轻微型的ORM框架--PetaPoco.从github Dapper 开源项目可以看到PetaPoco排第四 以下是网友根据官方介绍翻译,这里贴出来. PetaPoco ...
- Lifting the Stone
我们需要把一块石头平稳的从地板上拿起来.石头的底面是多边形且各个部分的高度都一样,我们需要找出石头的重心. input 测试案例 T; 每组第一行给出N,表示定点数. 接下来N行,每行连个数,表示坐 ...
- IIS错误500.21
操作系统:win7,有.net2.0,.net4.0 网站4.5, 错误原因:IIS未注册4.0框架. 解决办法: %windir%\Microsoft.NET\Framework\v4.0.3031 ...
- ORACLE时间函数(SYSDATE)深入理解
ORACLE时间函数(SYSDATE)深入理解 加法 select sysdate,add_months(sysdate,12) from dual; --加1年 select sysdate,add ...
- 打印W图案
一:规律 二维图形的展示都可以使用二维数组来解决,W图形x轴0,1,2,1,0,1,2.....在0到2直接来回的徘徊 y轴是在一直递增........ 二:代码 @Test /** * 测试打印w图 ...