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.示例代码

 1 #include <iostream>
 2 #include "ace/SOCK_Acceptor.h"
 3 using namespace std;
 4
 5 const int  SERVER_PORT = 3000 ;
 6 int main(int argc, char *argv[])
 7 {
 8     char buffer[1024];
 9     ACE_SOCK_Stream peer;//SOCK_IO,和客户端的数据通路
10     ACE_Time_Value timeout(100, 0);//TCP接受超时时间
11
12     //Socket创建,绑定,监听
13     ACE_INET_Addr addr(SERVER_PORT);
14     ACE_SOCK_Acceptor acceptor;
15     if(acceptor.open(addr) != 0)     //绑定端口
16     {
17         cout<<"bind port fail!"<<endl;
18         return -1;
19     }
20     cout<<"server ready. "<<endl;
21
22     while(true)
23     {
24         if (acceptor.accept(peer) != -1)    //建立和客户端的连接
25         {
26             std::cout<<"client connect. "<<std::endl;
27             while(true)
28             {
29
30                 if(peer.recv(buffer,1024,&timeout)<=0)    //接收数据(超时或对端断开break)
31                 {
32                     break;
33                 }
34                 cout<<"[server rev]:>"<<buffer<<endl;
35                 if(strcmp(buffer, "quit") == 0)
36                 {
37                     break;
38                 }
39                 do
40                 {
41                     cout<<"[server cin]:>";
42                     cin.getline(buffer,1024);
43                 }while(strlen(buffer)<=0);
44                 peer.send(buffer, strlen(buffer));    //发送数据
45
46             }
47             peer.close ();
48         }
49     }
50
51     return 0;
52 }

server.cpp

 1 #include <ace/SOCK_Connector.h>
 2
 3 #include <string>
 4 #include <iostream>
 5 using namespace std;
 6
 7 const int  SERVER_PORT = 3000 ;
 8
 9 int main(int argc, char *argv[])
10 {
11     char buffer[1024];
12
13     ACE_INET_Addr addr(3000,"192.168.237.128");
14     ACE_Time_Value timeout(100,0);
15     ACE_SOCK_Stream peer;
16     ACE_SOCK_Connector connector;
17     if(connector.connect(peer,addr,&timeout) != 0)
18     {
19         cout<<"connection failed !"<<endl;
20         return -1;
21     }
22     cout<<"conneced !"<<endl;
23
24     while(true)
25     {
26         do
27         {
28             cout<<"[client cin]:>";
29             cin.getline(buffer,1024);
30         }while(strlen(buffer)<=0);
31         peer.send(buffer, strlen(buffer));    //发送数据
32
33         if(peer.recv(buffer,1024,&timeout)<=0)    //接收数据(超时或对端断开break)
34         {
35             break;
36         }
37         cout<<"[client rev]:>"<<buffer<<endl;
38         if(strcmp(buffer, "quit") == 0)
39         {
40             break;
41         }
42     }
43     peer.close();
44
45     return 0;
46 }

client.cpp

时间: 2024-10-14 17:26:04

ACE_linux:TCP通信的相关文章

JAVASE02-Unit010: 多线程基础 、 TCP通信

多线程基础 . TCP通信 * 当一个方法被synchronized修饰后,那么 * 该方法称为同步方法,即:多个线程不能同时 * 进入到方法内部执行. package day10; /** * 当多线程并发操作同一资源时,由于线程切换的不确定 * 性,可能导致执行顺序的混乱,严重时可能导致系统 * 瘫痪. * @author adminitartor * */ public class SyncDemo1 { public static void main(String[] args) { f

epoll实现IO复用,TCP通信

函数原型: 函数说明:该函数允许进程指示内核等待多个事件中的任何一个发生,并只在有一个或多个事件发生或经历一段指定的时间后才唤醒它. 参数说明: fds:是一个struct pollfd结构类型的数组,用于存放需要检测其状态的Socket描述符: 每当调用这个函数之后,系统不会清空这个数组,操作起来比较方便:特别是对于socket连接比较多的情况下,在一定程度上可以提高处理的效率:这一点与select()函数不同,调用select()函数之后,select()函数会清空它所检测的socket描述

NetworkComms V3 使用TCP通信传递IList&lt;T&gt;类型的数据

客户端从服务器获取一组IList<T>类型的数据非常常见(通常从数据库中获取) 我们用NeworkComms V3来演示一下(NetworkcommsV2.x版本也同样支持) [ 使用protobuf.net序列化器] 第一步创建相关的工程文件: MessageContract中的 User类为契约类,使用protobuf.net进行序列化 写法如下: using System; using System.Collections.Generic; using System.Text; usin

C# 实现TCP通信

1.TCP/IP层次模型 当然这里我们只讨论重要的四层 01,应用层(Application):应用层是个很广泛的概念,有一些基本相同的系统级TCP/IP应用以及应用协议,也有许多的企业应用和互联网应用.http协议在应用层运行. 02,传输层(Tanspot):传输层包括UDP和TCP,UDP几乎不对报文进行检查,而TCP提供传输保证. 03,网络层(Netwok):网络层协议由一系列协议组成,包括ICMP.IGMP.RIP.OSPF.IP(v4,v6)等. 04,链路层(Link):又称为物

QT实现TCP通信服务器端和客户端(支持多个客户端)精简版

上星期接了个私活,工期两星期,报酬3000,写一个小软件,采集定向网络上的数据,并进行双向通信,捣鼓了两天,终于把QT中tcp通信这块调通了,找过N多例子,绝大部分都是基本的一个服务端一个客户端通信的,而且都不完整,甚至有些还发完数据就关闭了,还是自己亲自操刀先做了个TCP小工具,基本的需求搞定.window.open('http://www.qtcn.org/bbs/attachment/Mon_1309/44_110085_04c150bde9df7ee.jpg?67');" style=&

异步tcp通信——APM.Core 服务端概述

为什么使用异步 异步线程是由线程池负责管理,而多线程,我们可以自己控制,当然在多线程中我们也可以使用线程池.就拿网络扒虫而言,如果使用异步模式去实现,它使用线程池进行管理.异步操作执行时,会将操作丢给线程池中的某个工作线程来完成.当开始I/O操作的时候,异步会将工作线程还给线程池,这意味着获取网页的工作不会再占用任何CPU资源了.直到异步完成,即获取网页完毕,异步才会通过回调的方式通知线程池.可见,异步模式借助于线程池,极大地节约了CPU的资源. 注:DMA(Direct Memory Acce

异步tcp通信——APM.Core 解包

TCP通信解包 虽说这是一个老生长谈的问题,不过网上基本很少见完整业务:或多或少都没有写完或者存在bug.接收到的数据包可以简单分成:小包.大包.跨包三种情况,根据这三种情况作相对应的拆包处理,示例如下: 1 /***************************************************************************************************** 2 * 本代码版权归@wenli所有,All Rights Reserved (C)

C#中使用TCP通信

TCP通信需要通信双方都在线,所以需要先启动服务端进行监听,客户端才能获得连接,服务端代码: static void Main(string[] args) { TcpClient client = null; NetworkStream stream = null; byte[] buffer = null; string receiveString = null; IPAddress localIP = IPAddress.Parse("127.0.0.1"); int local

Java网络编程之TCP通信

一.概述 Socket类是Java运行clientTCP操作的基础类,这个类本身使用代码通过主机操作系统的本地TCP栈进行通信. Socket类的方法会建立和销毁连接,设置各种Socket选项. ServerSocket类是Java执行server端操作的基础类,该类执行于server,监听入站TCP连接.每一个socketserver监听server的某个port.当远程主机的client尝试连接此port时.server就被唤醒.并返回一个表示两台主机之间socket的正常Socket对象.