用 ServerSocket 作中转服务器 TCP 数据掉包了

show_20 CSDN会员 show_20 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
一台公网服务器中转两台不同内网电脑的TCP文件传输,

公网服务器用:ServerSocket1 模式:stNonBlocking


内网电脑用ClientSocket1 模式也是:ctNonBlocking


部分源码:

//全局变量设置:
var
Sok2:TCustomWinSocket;
MyBuffer: array[0..99999] of byte; {设置接收缓冲区}

//公网服务器收到客户端连接的时候,建立socket套接字
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin

Sok2:=Socket;

end;


//公网服务器接收的时候,立即进行转发
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
len, t: Integer;
begin

t := Socket.ReceiveLength;
len := Socket.ReceiveBuf(MyBuffer, t);
Sok2.SendBuf(MyBuffer, len); //出错的地方,转发不完整,掉包。
//注明:我把上面这句话放到线程里面处理,转发也同样不完整,掉包。
end;






问题在公网服务器接收立即进行转发,因为TCP会把一个整大包分成很多小包进行传输,第一个小包可以顺利转发,第二个,第三个,后面的小包,就不行了,发不出去,我用了线程处理,也发不了去。



各位高手一定明白其中的道理,就是接收太快了,发送太慢了,请问一般是用什么办法来进行顺利转发的?
...全文

相关推荐

评论 4
收藏 已收藏
分享
返回顶部