我阅读了文档,但不清楚bind()
和connect()
方法之间的区别。
3 回答
bind()
使套接字侦听特定接口/端口上的传入请求。换句话说,它被服务器用来响应传入的请求。只有一个套接字可以绑定一个端口。
connect()
导致套接字连接到由不同套接字服务的地址/端口。换句话说,它被客户端用来连接到服务器。多个客户端可以连接到一个端口。注意:使用 UDP(数据报)套接字时不需要 connect(),只有 TCP/IP。UDP 是一种广播协议,connect() 甚至不需要套接字正在监听另一端。
像这样的东西(改编自文档并且未经测试)应该发送和接收消息“你好,萝卜!” 在端口 12345 上对其自身:
package
{
import flash.events.DatagramSocketEvent;
import flash.net.DatagramSocket;
public class TestClass
{
private var serverSocket:DatagramSocket = new DatagramSocket();
private var clientSocket:DatagramSocket = new DatagramSocket();
public function TestClass():void
{
this.serverSocket.bind(12345, "127.0.0.1");
this.serverSocket.addEventListener(DatagramSocketDataEvent.DATA, dataReceived);
this.serverSocket.receive();
send("Hello, turnip!");
}
public function sendData(message:String):void
{
var data:ByteArray = new ByteArray();
data.writeUTFBytes(message);
try
{
clientSocket.send(data, 0, 0, "127.0.0.1", 12345);
trace("sending: " + message);
}
catch (error:Error)
{
trace(error.message);
}
}
private function dataReceived(e:DatagramSocketDataEvent):void
{
var data:String = e.data.readUTFBytes(e.data.bytesAvailable);
trace("received: " + data);
}
}
}
Bind 用于通过系统将特定端口分配给套接字,并且在第一个进程释放它之前,其他进程不能使用该特定端口。它通常用于服务器端。
监听和绑定是不一样的,listen 把socket 放到监听状态,换句话说,服务器socket 说我现在正在监听传入的客户端连接。
客户端使用 Connect 连接到侦听服务器套接字。
最后,当客户端在侦听状态下想要连接到它时,服务器套接字会使用accept。
对此的简单解释是:假设您已经创建了服务器和客户端套接字,serverSock
并且clientSock
当你说的时候serverSock.bind((localhost,portnumber))
,它意味着必须在唯一端口' 'serverSock
上寻址' 'localhost
portnumber
而如果您说clientSock.connect((localhost, portnumber))
在客户端,这意味着我们告诉客户端使用主机名与服务器连接 ' localhost
' (可以是服务器 IP 地址)并portnumber
使用clientSock
套接字在端口 ' ' 连接。