我阅读了documentation,但不清楚bind()
和connect()
方法之间的差异。
答案 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)
Bind用于按系统将特定端口分配给套接字,在第一个进程释放之前,没有其他进程可以使用此特定端口。它通常用于服务器端。
侦听和绑定不一样,listen将套接字置于侦听状态,换句话说,服务器套接字正在说我正在侦听传入的客户端连接。
客户端使用Connect连接到侦听服务器套接字。
当客户端想要在处于侦听状态时连接到服务器套接字时,服务器套接字会使用accept。
答案 2 :(得分:0)
对此的简单解释是:
假设您已将服务器和客户端套接字创建为serverSock
和clientSock
当您说serverSock.bind((localhost,portnumber))
时,表示serverSock
必须在唯一端口“localhost
”处理“portnumber
”
如果你在客户端说clientSock.connect((localhost, portnumber))
,那就意味着我们告诉客户端连接服务器,主机名为“localhost
”(可以是服务器IP地址),端口为“{{ 1}}'使用portnumber
套接字。