[急用]在Delphi中应该如何利用Winsock的API实现文件传送?(200分)

  • 主题发起人 主题发起人 placid
  • 开始时间 开始时间
P

placid

Unregistered / Unconfirmed
GUEST, unregistred user!
本人日前在写一段程序,由于特殊的要求,必须用Winsock的API来完成文件传送的功能。而本人对Winsock的编程几乎是一窍不通,再次请求各位大虾们帮忙,如果有完整的源代码更好,(越快越好,因为有急用)本人不胜感激,所有积分全部奉上!
 
我也不会你,可以找一下呀!
 
就是没有找到,在csdn上提出了问题,也没有人能真正使用winsock的api来解决的,只有人提供了一个使用ServerSocket+ClientSocket的解决方案。
方案的确可行,而且效率也高,但是不符合我的程序要求
 
一般都是用ServerSocket+ClientSocket来传送文件,我刚才做了一个。
http://www.czvms.com/down/chat.rar

 
Client:
var
SockAddrIn: TSockAddrIn;
s := socket(PF_INET, SOCK_STREAM, IPPROTO_IP);
SockAddrIn.sin_family := PF_INET;
SockAddrIn.sin_addr.s_addr := inet_addr(PChar(Address));
SockAddrIn.sin_port := htons(Port);
connect(s, SockAddrIn, SizeOf(SockAddrIn));
send(s, buf, len, 0);
n := recv(s, buf, len, 0);
...
closesocket(s);

Server:
var
SockAddrIn: TSockAddrIn;
ss := socket(PF_INET, SOCK_STREAM, IPPROTO_IP);
SockAddrIn.sin_family := PF_INET;
SockAddrIn.sin_addr.s_addr := INADDR_ANY;
SockAddrIn.sin_port := htons(Port);
bind(ss, SockAddrIn, SizeOf(SockAddrIn));
listen(ss, 5);
while not Terminated do
begin
s := accept(ss, nil, nil);
// create a thread to perform send/recv on s, remember to close it finally
end;
closesocket(ss);
 
看得不是很明白,能解释一下么?
 
直接用winSock编写, 比较麻烦, 你必须考虑的东西很多, 最后, 还有要封转成类的!
可参考如下:
http://www.ward.nu/computer/tsock/tsock.html
 
如果实在不行,可否用MSComm控件来实现?
如果可以的话,代码应该怎么写?
 
Client端流程是这样:先创建Socket,然后指定地址和端口进行连接,收发数据,最后关闭.
Server端:也是先创建Socket,然后绑定地址和端口进行监听以便Client连接,调用accept
就是等待Client连接,有连接发生时才会返回,这时用返回的Socket接受Client
的数据及向Client发送数据,完成后关闭.
顺便说一句,我说的创建新线程来处理是一般的做法,其实也可以就在当前线程处理
或者对所有的连接只开一个线程处理,根据情况灵活运用.
 
renyi:
不是把
叫人家看汇编啊
 
Aiirii:
goog
 
一个利用WinSocket控件传送文件的Demo。
http://www.aidelphi.com/6to23/docu/transfile.zip
看看这个怎么样??
 
仍然不是直接使用的winsock,不过还是谢谢大家。
 
后退
顶部