我有以下设置:LAN环境下的套接字通信
服务器将通过蓝牙连接到发送离散信号的多个设备。然后会有n个客户端可以查询服务器(可能通过网络服务)连接哪些设备,并从他们想要的设备收听信号。
我认为最好的实现方法是:当服务器通过BT连接到设备时,它会打开一个Socket到本地端口并在那里发送数据。当客户端询问可用设备时,服务器将返回一个字典,然后客户端只需要听该端口。
但我在套接字实现中遇到了一些问题。如何创建信号并将其写入本地端口?
这是我走到这一步:
class Device {
...
public EndPoint Connect() {
// create a bt connection to the device
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
var endPoint = new IPEndPoint(IPAddress.Parse(_localIp), 0);
_socket.Bind(endPoint);
return endPoint;
}
private void OnBtDataReceived(object sender, wclDataEventArgs e) {
_socket.Send(e.Data);
}
}
但到达_socket.Send(e.Data)时;收到以下例外:
的请求发送或接收数据被不允许的,因为在插座没有被连接和没有提供地址
(使用sendto调用发送数据报套接字时)这是正确的方法,但它需要有人连接到套接字来读取数据?
由于错误提示 - 套接字没有连接...您希望套接字如何处理您要发送的数据?缓冲吗?丢弃它? – Yahia
数据将实时显示,因此我希望任何想要读取数据的客户端都连接到该端口并阅读正在写入的内容。我不知道TCP套接字是否是最好的方法,但我想要类似于在线流式传输。 – dcarneiro
如果数据丢失是可以接受的,我会强烈建议UDP广播(这是“无连接”) - 它更像是一个“无线电”,任何想听的人只需要知道要听哪个端口... – Yahia