G
goodfox2002
Unregistered / Unconfirmed
GUEST, unregistred user!
下面是一个Winsock发信程序
如何在下面程序中加入服务器返回信息判断。
即判断新建发送过程是否正常,然后进行相应处理。
Winsock我不懂,最好能介绍相关函数或提供例程。
谢谢。
Function TMyThread.StartNet(host:string;port:integer):integer;
var
wsadata:twsadata;
fsocket:integer;
SockAddrIn:TSockAddrIn;
err:integer;
begin
//为网络连接作好准备(用winsock1.1以上版本)
err:=WSAStartup($0101,WSAData);
//创建一个客户端套接字(Client Socket,用SOCK_STREAM,即TCP协义)
FSocket := socket(PF_INET, SOCK_STREAM,IPPROTO_IP);
//初始化网络数据
SockAddrIn.sin_addr.s_addr:=inet_addr(PChar(host));
SockAddrIn.sin_family := PF_INET;
SockAddrIn.sin_port :=htons(port);
//客户端向smtp进行连接
repeat
err:=connect(FSocket,SockAddrIn, SizeOf(SockAddrIn));
until err=0;
//
Result:=FSocket;
end;
//以下是网络关闭的过程
procedure TMyThread.StopNet(Fsocket:integer);
var
err:integer;
begin
//发信结束,关闭客户端套接字(Close Client Socket)
err:=closesocket(FSocket);
//清除网络参数
err:=WSACleanup;
end;
//下面是个发送数据包的过程
function TMyThread.SendData(FSocket:integer;SendStr:string):integer;
const
MaxSize=1024;
var
DataBuf:array[0..MaxSize] of char;
err:integer;
begin
//读取网络数据
err:=recv(FSocket,DataBuf,MaxSize,0);
//将网络数据写入主窗口的标题中,提示用户正在发信过程中
//WriteCaption(handle,DataBuf);
//向网络发送数据
strcopy(DataBuf,pchar(SendStr));
err:=send(FSocket,DataBuf,strlen(DataBuf),MSG_DONTROUTE);
Result:=0;
end;
//下面是个发信的过程
procedure TMyThread.SendMail;
var SendBody:string;
FSocket:integer;
begin
//指定smtp主机的发信端口,默认为25
FSocket:=StartNet('202.96.106.130',25);
//---------------------------------------
//第一步:发HELO指令,表示我要开始发信了
SendData(FSocket,'HELO'+CRLF);
//第二步:发MAIL FROM指令,表示发信人的信箱
SendData(FSocket,'MAIL FROM: <xxx@xxx.com>'+CRLF);
SendData(FSocket,'RCPT TO: <xxx@xxx.com>'+CRLF);
//第四步:发DATA指令,表示要向SMTP主机发数据
SendData(FSocket,'DATA'+CRLF);
SendBody:='From:"xxx"<xxx@xxx.com>'+CRLF
+'To:"xxx"<xxx@xxx.com>'+CRLF
+'Subject:New test 2001.'+CRLF
+CRLF
+'Hello World.'+CRLF
+'.'+CRLF;
SendData(FSocket,SendBody);
//第六步:发结QUIT指令,表示发信过程结束
SendData(FSocket,'QUIT'+CRLF);
StopNet(Fsocket);
end;
如何在下面程序中加入服务器返回信息判断。
即判断新建发送过程是否正常,然后进行相应处理。
Winsock我不懂,最好能介绍相关函数或提供例程。
谢谢。
Function TMyThread.StartNet(host:string;port:integer):integer;
var
wsadata:twsadata;
fsocket:integer;
SockAddrIn:TSockAddrIn;
err:integer;
begin
//为网络连接作好准备(用winsock1.1以上版本)
err:=WSAStartup($0101,WSAData);
//创建一个客户端套接字(Client Socket,用SOCK_STREAM,即TCP协义)
FSocket := socket(PF_INET, SOCK_STREAM,IPPROTO_IP);
//初始化网络数据
SockAddrIn.sin_addr.s_addr:=inet_addr(PChar(host));
SockAddrIn.sin_family := PF_INET;
SockAddrIn.sin_port :=htons(port);
//客户端向smtp进行连接
repeat
err:=connect(FSocket,SockAddrIn, SizeOf(SockAddrIn));
until err=0;
//
Result:=FSocket;
end;
//以下是网络关闭的过程
procedure TMyThread.StopNet(Fsocket:integer);
var
err:integer;
begin
//发信结束,关闭客户端套接字(Close Client Socket)
err:=closesocket(FSocket);
//清除网络参数
err:=WSACleanup;
end;
//下面是个发送数据包的过程
function TMyThread.SendData(FSocket:integer;SendStr:string):integer;
const
MaxSize=1024;
var
DataBuf:array[0..MaxSize] of char;
err:integer;
begin
//读取网络数据
err:=recv(FSocket,DataBuf,MaxSize,0);
//将网络数据写入主窗口的标题中,提示用户正在发信过程中
//WriteCaption(handle,DataBuf);
//向网络发送数据
strcopy(DataBuf,pchar(SendStr));
err:=send(FSocket,DataBuf,strlen(DataBuf),MSG_DONTROUTE);
Result:=0;
end;
//下面是个发信的过程
procedure TMyThread.SendMail;
var SendBody:string;
FSocket:integer;
begin
//指定smtp主机的发信端口,默认为25
FSocket:=StartNet('202.96.106.130',25);
//---------------------------------------
//第一步:发HELO指令,表示我要开始发信了
SendData(FSocket,'HELO'+CRLF);
//第二步:发MAIL FROM指令,表示发信人的信箱
SendData(FSocket,'MAIL FROM: <xxx@xxx.com>'+CRLF);
SendData(FSocket,'RCPT TO: <xxx@xxx.com>'+CRLF);
//第四步:发DATA指令,表示要向SMTP主机发数据
SendData(FSocket,'DATA'+CRLF);
SendBody:='From:"xxx"<xxx@xxx.com>'+CRLF
+'To:"xxx"<xxx@xxx.com>'+CRLF
+'Subject:New test 2001.'+CRLF
+CRLF
+'Hello World.'+CRLF
+'.'+CRLF;
SendData(FSocket,SendBody);
//第六步:发结QUIT指令,表示发信过程结束
SendData(FSocket,'QUIT'+CRLF);
StopNet(Fsocket);
end;