TCP服务器接受数据问题

w20011025 2010-07-19 03:30:04
1.服务器采用TCP协议
2.客户端向服务端发送数据,每10秒发送一次数据 数据大小为250Kb
3,间隔10秒钟向服务器发送一次。
4。客户端发送结尾字符为“ZZ”(0x5A5A)
问:服务器程序如何接收250KB 数据,以及确认完毕?谢谢。
...全文
142 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
w20011025 2010-07-20
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 icedmilk 的回复:]
send(m_sockConn, (const char*)f1, sizeof(f1), 0);
[/Quote]
直接发送float数组?
我测试下,谢谢
Icedmilk 2010-07-20
  • 打赏
  • 举报
回复
send(m_sockConn, (const char*)f1, sizeof(f1), 0);
w20011025 2010-07-19
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 icedmilk 的回复:]
send(m_sockConn, (const char*)sendBuf, 800, 0);
recv(m_sockConn, (char*)recvBuf, 800, 0);
[/Quote]
1。TCP服务端
如何把float型数组转换成 BYTE数组发送呢?
float f1[]={1.1,1.3,1.3......}
BYTE b[]={...},如何转换呢?
2。在b[]末尾加入 0X5A5A 后(服务端TCP)发送数据
3。服务端发送数据send();
Icedmilk 2010-07-19
  • 打赏
  • 举报
回复
send(m_sockConn, (const char*)sendBuf, 800, 0);
recv(m_sockConn, (char*)recvBuf, 800, 0);
w20011025 2010-07-19
  • 打赏
  • 举报
回复
char sendBuf[800]={0xAA,0x00,0x33,0x4A,0x00,0x0B,0x00,0x01,0x00,0x0B,0x0B,0xAE,0x80};
服务器如何发送十六进制的数据?
客户端又如何接受数据?
qepwudann 2010-07-19
  • 打赏
  • 举报
回复
如果你用的是SOCK_STREAM
你什么多余的都不用考虑啦

你甚至可以这样写
客户端 send(pBuff, 250*1024 ...
服务端 recv(pBuff, 250*1024 ...

你的大小是固定的
所以也不用什么包头

再提醒你一下,TCP的套接字又叫流式套接字,就是一个数据流,在此协议之上,根本就没有什么报的概念

send 是把数据放入数据流
Icedmilk 2010-07-19
  • 打赏
  • 举报
回复
我所说的协议是TCP协议

如果你用的是SOCK_STREAM
你什么多余的都不用考虑啦

你甚至可以这样写
客户端 send(pBuff, 250*1024 ...
服务端 recv(pBuff, 250*1024 ...

你的大小是固定的
所以也不用什么包头

再提醒你一下,TCP的套接字又叫流式套接字,就是一个数据流,在此协议之上,根本就没有什么报的概念

send 是把数据放入数据流
recv 在另一端取出来的就是保证顺序,保证没有损失的数据

这就是TCP本身的能力。


[Quote=引用 7 楼 w20011025 的回复:]

引用 4 楼 icedmilk 的回复:
引用 3 楼 w20011025 的回复:
引用 1 楼 icedmilk 的回复:
。。。这个有什么问题吗?

recv 250kb之后close即可

ZZ是多余的

你都约定了发送数据的大小,就没必要确认完毕了
问下接受250Kb需要几秒钟?直接接收就可以了
数据不大吗?

这个直接接受就行了,TCP协议很棒
你就直接在……
[/Quote]
Eleven 2010-07-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 w20011025 的回复:]
引用 8 楼 wangningyu 的回复:

这个你自定义就行了吧。

比如一次发送254个字节
包头:2 字节
数据:250字节
包尾:2 字节

我发送的是250Kb
数据:250Kb
包尾:2byte (0x5A5A,结尾字符"ZZ")

直接判断结尾字符0x5A5A,就可以了吗?
[/Quote]
你的包头中都有一个完整包的长度信息了,其实就不需要结尾字符了
w20011025 2010-07-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wangningyu 的回复:]

这个你自定义就行了吧。

比如一次发送254个字节
包头:2 字节
数据:250字节
包尾:2 字节
[/Quote]
我发送的是250Kb
数据:250Kb
包尾:2byte (0x5A5A,结尾字符"ZZ")

直接判断结尾字符0x5A5A,就可以了吗?
汪宁宇 2010-07-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 w20011025 的回复:]
是在局域网内发送,接受数据。
至于250KB需要拆多少个包,协议自己搞定
一时刚接触,这协议如何写?
[/Quote]

这个你自定义就行了吧。

比如一次发送254个字节
包头:2 字节
数据:250字节
包尾:2 字节

w20011025 2010-07-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 icedmilk 的回复:]
引用 3 楼 w20011025 的回复:
引用 1 楼 icedmilk 的回复:
。。。这个有什么问题吗?

recv 250kb之后close即可

ZZ是多余的

你都约定了发送数据的大小,就没必要确认完毕了
问下接受250Kb需要几秒钟?直接接收就可以了
数据不大吗?

这个直接接受就行了,TCP协议很棒
你就直接在客户端send
在服务端recv
至于25……
[/Quote]是在局域网内发送,接受数据。
至于250KB需要拆多少个包,协议自己搞定
一时刚接触,这协议如何写?
来灵 2010-07-19
  • 打赏
  • 举报
回复
在客户端每次发送1K数据,循环发送,直到发送完毕
同样在服务器端循环接收,直到实际收到的数据长度等于实际发送的数据长度,即收到了ZZ,本次发收完成
Eleven 2010-07-19
  • 打赏
  • 举报
回复
自己封装应用层协议,加个包头长度,接收端先读出包头长度信息,然后再按该长度读取后续的数据。。。
Icedmilk 2010-07-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 w20011025 的回复:]
引用 1 楼 icedmilk 的回复:
。。。这个有什么问题吗?

recv 250kb之后close即可

ZZ是多余的

你都约定了发送数据的大小,就没必要确认完毕了
问下接受250Kb需要几秒钟?直接接收就可以了
数据不大吗?
[/Quote]
这个直接接受就行了,TCP协议很棒
你就直接在客户端send
在服务端recv
至于250KB需要拆多少个包,协议自己搞定

需要多少时间要看网络情况啊

如果是局域网,这是瞬间的事情。
w20011025 2010-07-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 icedmilk 的回复:]
。。。这个有什么问题吗?

recv 250kb之后close即可

ZZ是多余的

你都约定了发送数据的大小,就没必要确认完毕了
[/Quote]问下接受250Kb需要几秒钟?直接接收就可以了
数据不大吗?
m_tornado 2010-07-19
  • 打赏
  • 举报
回复
数据大小250K?一次发完?
不大可能吧,这数据大了点儿~
Icedmilk 2010-07-19
  • 打赏
  • 举报
回复
。。。这个有什么问题吗?

recv 250kb之后close即可

ZZ是多余的

你都约定了发送数据的大小,就没必要确认完毕了

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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