DatagramSocket bind()和connect()的区别?

时间:2012-10-17 20:11:15

标签: actionscript-3

我阅读了documentation,但不清楚bind()connect()方法之间的差异。

3 个答案:

答案 0 :(得分:9)

bind()会使套接字侦听以获取特定接口/端口上的传入请求。换句话说,服务器使用它来响应传入的请求。只有一个套接字可以绑定端口。

connect()使套接字对由其他套接字提供服务的地址/端口进行连接。换句话说,客户端将连接用于服务器。多个客户端可以连接到端口。 注意:连接()不需要与UDP(数据报)套接字一起使用,只需要使用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);
        }
    }
}

答案 1 :(得分:0)

  1. Bind用于按系统将特定端口分配给套接字,在第一个进程释放之前,没有其他进程可以使用此特定端口。它通常用于服务器端。

  2. 侦听和绑定不一样,listen将套接字置于侦听状态,换句话说,服务器套接字正在说我正在侦听传入的客户端连接。

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

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

答案 2 :(得分:0)

对此的简单解释是: 假设您已将服务器和客户端套接字创建为serverSockclientSock

当您说serverSock.bind((localhost,portnumber))时,表示serverSock必须在唯一端口“localhost”处理“portnumber

如果你在客户端说clientSock.connect((localhost, portnumber)),那就意味着我们告诉客户端连接服务器,主机名为“localhost”(可以是服务器IP地址),端口为“{{ 1}}'使用portnumber套接字。