ClientSocket的发送端口怎么设定?(100分)

  • 主题发起人 主题发起人 amwtdkj
  • 开始时间 开始时间
A

amwtdkj

Unregistered / Unconfirmed
GUEST, unregistred user!
在Client向Server发送请示的时候系统会给Client分配一个发送端口,当Client关闭联接后,再向Server发送请示的时候系统会再给Client分配一个新的发送端口,我自己认为这个端口是可以自己来设定的!因为delphi好象把一个端口号按秒递增1。
这个发送端口可不可以自己来设定呢?怎么设定?
我这样写过:
var addr:sockaddr_in;

addr.sin_family :=AF_INET;
addr.sin_port:= htons(2300);
bind(ClientSocket.Socket.SocketHandle,addr,sizeof(addr));

setsockopt(ClientSocket.Socket.SocketHandle, SOL_SOCKET, SO_REUSEADDR, pchar('2300'), sizeof('2300'));
都没有成功,请各位大哥大姐帮忙看一下!我主要是想下一步作端口映射!谢谢谢谢谢谢!!!
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2708614
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2720930 注意是在OnLookUp事件中
 
这样子也没有多大用途除非你的客户端外网上,有网关的情况下,还是被网关转换了,没有用的。setsockopt(ClientSocket.Socket.SocketHandle, SOL_SOCKET, SO_REUSEADDR, pchar('2300'), sizeof('2300'));这种方式 TCP可能不被支持,就算行,也容易被网关断掉的。
你还不于,让客端主动连接你,也就反向连接的。不管怎样,你总有一端在Internet上,能打通路线,否则就用第三方中转服务器。
 
你实际上是想让TCP直连,像UDP那样的打洞消息通信,可是TCP不能这样的
 
我想让端口定下来,我是这样想的:TCP不能用于打洞吗?
有一如服务器S在外网上,还有台机子A:192.168.1.2在内网,
A:192.168.1.2:2600——S:23.23.23.23:3600,session建立,NAT转换之后,A:88.88.88.88:26000——S:23.23.23.23:3600,如果这时候我关闭本次联接,再让
A:192.168.1.2:2600——S:23.23.23.23:3600,session建立,NAT转换之后,A:88.88.88.88:*****(这个端口还是26000吗?)——S:23.23.23.23:3600,
 
有做过这样的试验,nat转换后,和系统动态分配端口一样,随机的
 
应该不可以吧?
 
如果TCP不能打洞,哪怎么和另一个内网的IP通讯呢?
 
MSN是怎么作到的?它好象用的是TCP呀!QQ用的是UDP,请客位大哥赐教!
 
还有一个问题:
UDPsocket:=socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
SockAddr.sin_family:= AF_INET;
SockAddr.sin_port:= htons(2600); //MY:Port
SockAddr.sin_addr.S_addr:= inet_addr(192.168.1.3);//MY:IP
// allowreport:=true;
//setsockopt(TcpServer.Socket.SocketHandle , SOL_SOCKET, SO_REUSEADDR,@allowreport,sizeof(allowreport));
bind(UDPsocket, SockAddr, SizeOf(SockAddr));
我这样作可以吧????
 
还有recvform()用什么事件触发?
CMY_SOCKETMESSAGE = WM_USER + $0001;
WSAAsyncSelect(UDPsocket,self.Handle,CMY_SOCKETMESSAGE,FD_WRITE or FD_READ or FD_OOB or FD_CLOSE);
procedure CMYSocketMessage(var Message:TMessage); message CMY_SOCKETMESSAGE;
我自己写了个消息,为什么消息这个只被触发一次?(第一次收到数据,这个过程动作,可我再发数据,它就不动作了?)为什么?
 
http://www.delphibbs.com/keylife/iblog_show.asp?xid=19752
有多个例子,看看有没有可以用的
 
谢谢!我已经作好了!
 
多人接受答案了。
 
后退
顶部