在DELPHI下的WINSOCK问题(50分)

  • 主题发起人 主题发起人 hspdel
  • 开始时间 开始时间
H

hspdel

Unregistered / Unconfirmed
GUEST, unregistred user!
我在DELPHI下用WINSOCK建立连接,连接成功,send也成功了,但是SERVER端却收不到数据,不知道是为什么啊?
请各位老大帮忙解决了谢谢先了。
 
如下:
ServerSocket1.Socket.Connects[0].Recv(....);
 
能不能说详细点啊(而且我是用API函数写的,不用控件的)
呵呵最好能给个简单的例子了谢谢,我是个DELPHI的新手,不太懂了。
 
把你的代码写出来看看?
 
厉害!厉害!
delphi新手就用API写winsock程序!
 
我的CLIENT端应该是没问题了,因为我用控件做SERVER端的话传输是正常的,但SERVER端用API
写的连接没问题,SEND也成功了,但是RECV就是收不到了。
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,Winsock,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}
var
sock,len,msgsock:integer;
//sock,length,,rval,err:integer;
buf:array[0..1023]of char;
wVersionRequested:WORD;
wsaData:TWSADATA;
server:TSockAddrIn;
i,err:integer;
procedure TForm1.Button1Click(Sender: TObject);
begin
wVersionRequested:=MAKEWORD(2,0);
err:=WSAStartup(wVersionRequested,wsaData);
if err=-1 then
Label1.Caption:='初始化失败!'
else begin
sock:=socket(AF_INET,SOCK_STREAM,0);
if sock<0 then
Label1.Caption:='创建套接口失败!'
else begin
server.sin_family:=AF_INET;
server.sin_port:=htons(2000);
server.sin_addr.s_addr:=INADDR_ANY;
bind(sock,server,sizeof(server));
len:=sizeof(server);
getsockname(sock,server,len);
listen(sock,5);
msgsock:=accept(sock,@server,@len);
i:=recv(sock,buf,1024,MSG_OOB);
if i<0 then
Label1.Caption:='接收失败!';
end
end
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Closesocket(msgsock);
WSACleanup();

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Edit1.Text:=buf;
end;

end.

呵呵希望各位高手帮忙了谢谢了!
 
在创建了Socket之后
应当在消息循环中检测Socket消息,
你可以到网上找一个控件的例子读一下。
 
msgsock:=accept(sock,@server,@len);
i:=recv(sock,buf,1024,MSG_OOB); 此句有错!!!!!


应为
i:=recv(msgsock,buf,1024,MSG_OOB);
 
哈哈
同意楼上哥们儿的意见,i:=recv(msgsock,buf,1024,MSG_OOB);
to hspdel:太粗心了
 
不好意思了,
关于循环不停的监听是否有数据可读,我早就试过了。我断点跟踪了每次循环还是收不到数
据。至于SOCK换成MSGSOCK,是我的代码贴错了,我调试的代码中确实是用ACCEPT的返回的
用来RECV的。就是这样我才觉得奇怪啊!希望各位兄弟们帮我一起想想了,谢谢了!(不会
是我这两天倒霉吧!)
 
hspdel:如果还想接着讨论请定期提前自己的帖子,如果不想继续讨论请结束帖子。
 
多人接受答案了。
 
后退
顶部