急!急!急!一个简单的socket发送接收信息的问题!(50分)

J

jhjk

Unregistered / Unconfirmed
GUEST, unregistred user!
麻烦各位大虾指点迷津,不知何处出了问题,接收不到信息!
键入要连接的主机地址(Edit3内)和端口号( Edit4),在一个文本框内(Edit1)输入发送
信息,在其下面的文本框内(Edit2)接收发送的信息,Button1为发送按钮,Button3为连接
按钮,Button4为断开按钮,Memo1为显示出现的提示信息框
我的源程序代码如下:
unit main;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,stdctrls,winsock,ExtCtrls,ComCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Edit2: TEdit;
Button3: TButton;
Button4: TButton;
Label1: TLabel;
Edit3: TEdit;
Label2: TLabel;
Memo1: TMemo;
Edit4: TEdit;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
skt:TSocket;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
Var
WSAData:TWSAData;
begin

if (WSAStartup(MAKEWORD(2,0),WSAData)<>0)then
begin
memo1.Lines.Add('Winsock Init Failed');
exit;
end
else
memo1.Lines.Add('Socket Start');
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
WSACleanUP();
end;

procedure TForm1.Button3Click(Sender: TObject);
Var
addr:TSockAddr;
Re:Integer;
begin
skt:=socket(AF_INET,SOCK_STREAM,0);
if(skt=INVALID_SOCKET)then
begin
memo1.Lines.Add('Erro:Create socket failed!');
exit;
end;
ZeroMemory(@addr,sizeof(addr));
addr.sin_family:=AF_INET;
addr.sin_addr.S_addr :=inet_addr(Pchar(edit3.Text));
addr.sin_port :=htons(StrToInt(edit4.Text));
Re:=connect(skt,addr,sizeof(addr));
if(Re<>0)then
begin
memo1.Lines.Add('Connect to server failed');
exit;
end
else
Memo1.Lines.Add('Connect to server Success');

end;
procedure TForm1.Button1Click(Sender: TObject);
Var
Info:string;
BufSend,BufRecv:pchar;
Re:Integer;
begin
GetMem(BufSend,1024);
ZeroMemory(BufSend,1024);
Info:=edit1.Text ;
StrPCopy(BufSend,Info);
Re:=Send(skt,BufSend^,Length(BufSend),0);
showmessage(inttostr(Re));
if(Re=SOCKET_ERROR) then
begin
Memo1.Lines.Add('Send Data Failed');
exit;
end;
GetMem(BufRecv,1024);
repeat
ZeroMemory(BufRecv,1024);
Re:=recv(skt,BufRecv^,1024,0);
// showmessage(inttostr(Re));
Info:=StrPas(bufRecv);
edit2.Text:=edit2.text+Info;
until re=0;
FreeMem(BufSend);
FreeMem(BufRecv);

end;

procedure TForm1.Button4Click(Sender: TObject);
Var
Re,err:integer;
Info:string;
begin
Re:=closesocket(skt);
if Re=SOCKET_ERROR then
begin
err:=WSAGetLastError();
case err of
WSANOTINITIALISED:Info:='Run WSAStartup first';
WSAENETDOWN: Info:='The network subsystem has failed';
WSAENOTSOCK: Info:='The descriptor is not a socket';
WSAEINPROGRESS: Info:='Sockets busy';
WSAEINTR: Info:='Canceled through WSACancelBlockingCall';
WSAEWOULDBLOCK: Info:='time-out value to large';
end;
end
else
Info:='Close socket success';
memo1.Lines.Add('Info');
end;


end.
 
没仔细看,就看了这么两句
Info:='Close socket success';
memo1.Lines.Add('Info');
'info',先寒一个!!
 
to aming46
谢谢,真是火眼金星哦
能在帮我仔细看看程序么?
 
顶部