用 ServerSocket 作中转服务器 TCP 数据掉包了
一台公网服务器中转两台不同内网电脑的TCP文件传输,
公网服务器用:ServerSocket1 模式:stNonBlocking
内网电脑用ClientSocket1 模式也是:ctNonBlocking
部分源码:
问题在公网服务器接收立即进行转发,因为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会把一个整大包分成很多小包进行传输,第一个小包可以顺利转发,第二个,第三个,后面的小包,就不行了,发不出去,我用了线程处理,也发不了去。
各位高手一定明白其中的道理,就是接收太快了,发送太慢了,请问一般是用什么办法来进行顺利转发的?
...全文
相关推荐
一个嵌入式开发基于tcp协议serversocket端,用于显示数据.zip
一个嵌入式开发基于tcp协议serversocket端,用于显示数据.zip
TCP.rar_ServerSocket delphi_clientsocket文件
局域网内的完全通信,实现数据的传输与交换,将服务端和客户端完全集中在一个项目文件中,局域网中完美实现通信!TCP通信,用SERVERSOCKET和CLIENTSOCKET实现
使用Socket和ServerSocket实现多人聊天的聊天室程序
基于TCP的网络编程,使用Socket和ServerSocket实现多人聊天的聊天室程序,Java网络编程章节训练的小程序
socket-ServerSocket例子
本资源是java中socket与serverSocket连接的例子,包括客户端和服务器端的程序代码
ServerSocket用法详解
提供线程池的一种实现方式,介绍java.util,concurrent包中的线程池类的用法,在服务器中可以直接使用它们


网络通信/分布式开发
