首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

Socket控件可不可以双向传输

2013-10-25 
Socket控件能否双向传输?很少使用Socket控件,发现它只能单向传输数据,所以,我只能用类似下面的方法,采用两

Socket控件能否双向传输?
很少使用Socket控件,发现它只能单向传输数据,所以,我只能用类似下面的方法,采用两个socket,一个用于发送,一个用于接收。请问有没有知道有什么更好的处理方式?


procedure TDM.TcpClient1Connect(Sender: TObject);
var
   str1: string;
begin
      str1:= '#1#'+ gConfig.stdid+ ','+ gConfig.stdid;
     TcpClient1.Sendln(str1);
     TcpClient1.Disconnect;
     TcpClient2.RemoteHost:= gConfig.host;
     TcpClient2.RemotePort:= inttostr(gConfig.port- 1);
     TcpClient2.Connect;
end;
procedure TDM.TcpClient2Connect(Sender: TObject);
var
   str1: UTF8STRING;
   str2, cmd, sInfo: string;
   a: integer;
begin
     str1:= TcpClient2.Receiveln;
     str2:= UTF8toansi(str1);
     cmd:= readBetween(str1, '#', '#', a);
     sInfo:= copy(str2, a, length(str2));
     if cmd= '101'  then begin
        UserInfo:= sInfo;
        DeviceState:= 1;
     end;
     TcpClient2.Disconnect;
end;

另外,现在我用的处理方式只能接收文字,有什么好办法进行图片或者文件传输么? socket 文件传输 TCP/IP 控件 图片
[解决办法]
我客户端用的是TIdTCPClient,发送用WriteLn,接收用ReadLn。好像还不错,希望对你有帮助。
[解决办法]
indy控件不错,只不过indy采用阻塞方式处理,所以客户端使用没什么太大问题
服务端就不要用了,每个连接都自动开启一个线程,当客户端少的时候也没什么问题
客户端多了后(比如1000个连接)之后,系统资源严重浪费
如果是做服务器端,操作系统环境是Windows的话,完成端口技术是非常不错的选择

[解决办法]
肯定是双向的
二进制内容,有流方式收发函数的
[解决办法]
关键在于你设置控件的阻塞模式。
当你设置为阻塞(Blocked)模式时,
行为就会像你描述的那样。
将其设为非阻塞模式,
可能可以获得你要的结果。

话说回来,如果你要建构稳定的大型系统,你还是要认真学习阻塞模式,理论上阻塞模式比较稳定。
当然,凡事都有例外,
也许你的应用就是用非阻塞模式比较稳定也说不定。
[解决办法]
主從雙向..
[解决办法]
socket 本来就是双向的,可以用自带的TTcpClient 和 TTCpServer ,这两个控件是非常不错的。

热点排行