请教:请各位大哥帮我看看这两个 socket 问题,谢谢! ( 积分: 5 )

  • 主题发起人 主题发起人 宇宙神
  • 开始时间 开始时间

宇宙神

Unregistered / Unconfirmed
GUEST, unregistred user!
请教:
我有两个程序,一个 server ,一个 client
server 上了放了个 serversocket1 , client 上放了个 clientsocket1

问题1:
serversocket1 和 clientsocket1
他们的
serversocket1.open;

serversocket1.active:=true;

有什么区别?
一般是用哪个?

serversocket1.close;

serversocket1.active:=false;

有什么区别?
一般是用哪个?

问题2:
我在 server 的
procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1.Open; //还是用 ServerSocket1.active:=true; 呢?
end;


在 client 的
procedure TForm1.FormCreate(Sender: TObject);
begin
ClientSocket1.Open; //还是用 ClientSocket1.active:=true; 呢?
end;
谢谢!
 
问题1:没有区别
问题2:随便
你看一下vcl的源代码就知道了
 
谢谢大哥
还有两问题是:
问题1:
如果我的 server 运行,而是先运行 client
则编译运行后 弹出:
project:project1.exe raised exception class EsocketError with
message 'ASynchronous socket error 10061', process stopped
这是什么原因啊?
还有
procedure TForm1.FormCreate(Sender: TObject); //连接服务器
begin
// ClientSocket1.Active:=true;
try
ClientSocket1.Open;
except
showmessage('连不上服务器');
end;
end;

还是弹出安阳的错误,而不是 ‘连不上服务器'
这要怎么处理?

问题2:
socket 每次传的最大是多少,如果文件太大了,按怎么办?
是不是分几次传?
哪个属性是设最大传输量?
分几次传程序是怎么写的?

谢谢!
 
哎,用socket时要先设计协议,文件大了当然要分次传
还要考虑是用阻塞式还是非阻塞式,
错误处理的时候可以放在socket里
我以前写过一个,可惜现在代码在家里
你的错误要考虑是不是端口没有设置或者服务端没有监听
一定要先让服务端处于监听状态再client.open
 
windows默认的缓冲区大小是4K,一般如果在互联网上传的话要尽量小于这个数,因为windows还要加上其它数据编成包,一般定义成2/3K就可以了
你不用设置的,如果是非阻塞式在onClientRead事件里根据协议,传文件的时候根据已接收文件大小同总大小进行判断,如果小于总大小则说明没传完
 
谢谢大哥!
您的意思是如果服务器不是先处于监听,
那么客户段 ClientSocket1.Open;出现作为是正常的,是不?

procedure TForm1.FormCreate(Sender: TObject); //连接服务器
begin
// ClientSocket1.Active:=true;
try
ClientSocket1.Open;
except
showmessage('连不上服务器');
end;
end;


为什么弹出的不是 '连不上服务器'
而是
project:project1.exe raised exception class EsocketError with
message 'ASynchronous socket error 10061', process stopped

呢?
谢谢!
 
大哥,明天可把您的程序发给我参考,好吗?
谢谢
 
你要在OnClientError事件中去判断错误:
ShowMessage(SysErrorMessage(ErrorCode));
ErrorCode:=0;
不好意思,我前两天没有上来,没看到,这些你可以看Delphi的Demo
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部