7

我阅读了文档,但不清楚bind()connect()方法之间的区别。

4

3 回答 3

13

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);
        }
    }
}
于 2012-10-18T18:07:05.343 回答
1
  1. Bind 用于通过系统将特定端口分配给套接字,并且在第一个进程释放它之前,其他进程不能使用该特定端口。它通常用于服务器端。

  2. 监听和绑定是不一样的,listen 把socket 放到监听状态,换句话说,服务器socket 说我现在正在监听传入的客户端连接。

  3. 客户端使用 Connect 连接到侦听服务器套接字。

  4. 最后,当客户端在侦听状态下想要连接到它时,服务器套接字会使用accept。

于 2013-09-23T00:05:57.603 回答
0

对此的简单解释是:假设您已经创建了服务器和客户端套接字,serverSock并且clientSock

当你说的时候serverSock.bind((localhost,portnumber)),它意味着必须在唯一端口' 'serverSock上寻址' 'localhostportnumber

而如果您说clientSock.connect((localhost, portnumber))在客户端,这意味着我们告诉客户端使用主机名与服务器连接 ' localhost' (可以是服务器 IP 地址)并portnumber使用clientSock套接字在端口 ' ' 连接。

于 2014-12-08T16:05:19.240 回答