C++ 用TCP发送数据流

wadegordon 2012-11-17 02:33:45
C++ 怎样把几个string字符串和int类型的数据按顺序加入一个流中,然后用tcp把这个流发送到指定IP端口的目标机器上,并读取返回数据流???
高手们请给个例子

想说让我去网上搜的就不用回答了!!
...全文
519 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
firendlys 2012-11-17
  • 打赏
  • 举报
回复
1. 新建一个超大的 char *p 数组...大到足够容纳你所需要的数据为止 2. 将每一个string的内容放到这个 p数组里面. 比如: 如果是 std::string , 就 strcpy(p,str.c_str()); 如果是 std::wstring ,就 memcpy(p,str.c_str(),str.size()*2) 或者先转化为 std::string ,再按std::string处理... 如果是 char* 的字符串,就直接strcpy, 如果是 wchar_t*的字符串,按 std::wstring 处理. 如果是其他,如 CString , 分 UNICODE 和 非UNICODE ,按上面说的处理. 解码的时候很简单,就直接定义一个 std::string str; 然后 str= p;//假设是接收到的数据. 然后str就是第一个字符串. 接着p的指针增加str的长度个单位,即 p+=str.size(); 接着继续解释第二个字符串. 当然,对于 UNICODE 版本的字符串解释,则复杂一些... 另外,上面提及的是不考虑字节顺序的. 如果是需要考虑字节顺序的,请参考下面的 int 处理方式. 3. 将 int 整数放到 p 里面. 如果不需要考虑字节顺序(即:假设通信双方都是windows系统),可以直接认为是char*处理. 如: int i=10; memcpy(p,&i,sizeof(i)); 即可. 如果是需要考虑直接顺序,则需要对这个int进行一定的编码,保证对方可以还原出这个数字出来. 最简单的就是按字节处理. 如: int i=10; p[0] = (char)((i >>24)&0xff);//提取i的最高8位 p[1] = (char)((i >>16)&0xff); p[2] = (char)((i >>8)&0xff); p[3] = (char)((i >>0)&0xff);//提取i的最低8位 然后对方解码的时候也按照这个规则解码即可. --------------- 反正这个东西,说复杂其实不太复杂,说简单也不算简单. 关键是制定一种规则,使接收的一方可以还原出数据即可.至于这种规则是什么,由你自己决定,没什么标准. 这个就叫通信协议. 如果你只是说纯粹要发送出去,不管对方能不能识别,那没有意义. ---------------- 另外,我记得网上应该有一些已经封装好的类,不过我记不起叫什么名字了,你可以自己找一下.
转角天边 2012-11-17
  • 打赏
  • 举报
回复
引用 1 楼 wadegordon 的回复:
怎么没人理啊 ?? 各位花几分钟帮帮忙啊 谢谢了!!!
定义一个结构体,比如 typedef struct LoginSys { int ServerType; char UseName[100]; }LOGINSYS; 然后在程序中定义一个结构体变量 LOGINSYS login; 把值赋给这个结构体变量,再定义一个数组,把结构体变量login的值赋给这个数组 char SendBuf[255]={0}; memcpy(SendBuf,&login,sizeof(login)); 发送的时候,发送这个数组就可以了
wadegordon 2012-11-17
  • 打赏
  • 举报
回复
怎么没人理啊 ?? 各位花几分钟帮帮忙啊 谢谢了!!!

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧