一个关于bind的问题(30分)

  • 主题发起人 主题发起人 iknowabc
  • 开始时间 开始时间
I

iknowabc

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟编写一个socket封装程序,下面tcp_socket是在create创建的。
function TMyUDPSocket.bind(ip:string;port:integer):boolean;
var
addr_server:TSOCKADDR;
err:integer;
begin
result:=false;
//Assert(TCP_Socket<>nil);
UDPPort:=Port;

ZeroMemory(@addr_server,sizeof(addr_server));
with addr_server do
begin
sin_family :=AF_INET;
sin_port :=htons(UDPPort);
sin_addr.S_addr :=inet_addr(pchar(ip));
end;
err:=bind(UDP_Socket,addr_server,sizeof(addr_server));
if err<>0 then exit;
result:=true;
end;
编译时老是说'bind'那一行有以下错误:
Incompatible types: 'string' and 'integer'
Incompatible types: 'integer' and 'sockaddr_in'
Incompatible types: 'integer' and 'boolean'
不知哪里错了,我查了bind的原型,是这样的参数顺序呀?

 
似乎没什么错,可否把你的代码全都贴出来看。
 
呵呵,其他代码没有什么特别的
TMyUDPSocket =class(Tobject)
public
UDP_Socket:Tsocket;
constructor create;
destructor Destroy; override;
function bind(ip:string;port:integer):boolean;
……没有什么特别的,UDP_Socket是在create中创建的。
请大侠帮帮忙!
 
可能没有 uses winsock 吧? 结果你的bind认到 TMyUDPSocket.bind 了
或者,指定 winsock.bind(......
 
对,你的bind和socket API的bind同名了。
把你的function bind(ip:string;port:integer):boolean;
改成function my_bind(ip:string;port:integer):boolean;

 
我uses了winsock了呀
 
那你就用 winsock.bind 来代替光棍的bind
 
hoho,又是重名问题。
要吗把你的bind改为mybind
要吗加unit限制,用winsock.bind。
建议前者。
 
多人接受答案了。
 
后退
顶部