我有一个需要在同一端口上传输和接收的应用程序.这可能发生在两种情况:
PC正在与一块远程硬件通信.它"回复发件人",因此数据报通过发送端口返回到我的PC.
PC正在与自己交谈(环回模式)进行测试和演示(测试应用程序通过UDP将假数据输入我们的主应用程序).
这只在尝试实现环回时似乎失败了.我能让它工作的唯一方法是确保首先设置接收器 - 这是我无法保证的.
任何人都可以通过建议一种"正确"的方式来实现UdpClient来可靠地处理上述情况,从而帮助缩小搜索范围吗?
(我发现使用远程硬件可靠工作的唯一解决方案是以双向方式使用单个UdpClient,尽管我正在处理可能影响该发现的遗留代码.我尝试使用两个UdpClients,但他们踩到彼此的脚趾 - 在某些情况下,一旦一个客户端启动,另一个客户端无法连接.使用ExclusiveAddressUse/ReuseAddress设置允许端口共享,我几乎可以让它工作,除了接收器必须先开始)
编辑
详细说明:
我们通过UDP与外部硬件通信.当它收到我们的通信时,它会回复源地址 - 所以我们会在同一个端口上收到消息.这部分工作正常.
但是,如果我尝试使用环回来模拟外部硬件(即我通过相同的端口发送和接收"自己"),如果我在开始传输之前开始接收,我只能接收数据报.这工作正常 - 但如果我传输然后尝试接收,我从来没有收到任何数据.在这种情况下,我实际尝试发送的内容无关紧要.
所以我有两个问题:
1)如何管理可靠工作的环回.
2)如何做(1)不打破目前工作正常的外部通信!
由于我已经尝试了1或2个UdpClients的各种组合以及多种不同的设置(无济于事),我只是想知道是否有人设法让UPD环回正常工作,因为这可能会让我领先于解决方案,我可以在所有情况下工作.
感谢您花时间考虑这个......
我有关于插座/客户端的问题....
我刚刚用C#编写了一个客户端服务器程序.我想知道,你如何连接到具有不同IP地址的计算机.例如,如果我想在两台不同的机器上单独运行客户端和服务器,则loopback(或使用localhost)将不允许这样....
不太熟悉网络,任何帮助将不胜感激..这是我在客户端的代码处理环回:
TcpClient client = new TcpClient();
IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888);
Run Code Online (Sandbox Code Playgroud) 那么,那个XD,如何从操作钩子中获取查询器的IP地址(如果那甚至是单词xD)?还是一个远程钩子?(我可以保存它loopback.getCurrentContext()以便在操作钩子上使用).
说:
Model.observe('loaded', function(ctx,next) {
ctx.ip ??
});
Run Code Online (Sandbox Code Playgroud) 我正在关注LoopBack的官方"入门"教程:https://loopback.io/doc/en/lb3/Use-API-Explorer.html
一切都很好看.但是,当在Web浏览器中打开API-Explorer时,它会给出404:
404无法获取/浏览器
这将返回404状态代码:http://0.0.0.0 : 3000/explorer
是否缺少Tutorial和最新的loopback-generator之间的文档或一些不兼容性?
我完全按照教程中提到的那样完成了每一步.
也许这个名为"server/config.json"的配置文件可以提供帮助,因为我偶然发现了一个设置"legacyExplorer":false.
或者是否有必要将资源管理器安装为单独的组件?
{
"restApiRoot": "/api",
"host": "0.0.0.0",
"port": 3000,
"remoting": {
"context": false,
"rest": {
"normalizeHttpPath": false,
"xml": false
},
"json": {
"strict": false,
"limit": "100kb"
},
"urlencoded": {
"extended": true,
"limit": "100kb"
},
"cors": false,
"handleErrors": false
},
"legacyExplorer": false
}
Run Code Online (Sandbox Code Playgroud) 我创建了一个简单的文件上传应用程序环回.应用程序客户端我使用简单的html和Java Script代码.
我用ajax调用调用loopback api,这是Java脚本代码 -
$('#upload-input').on('change', function () {
var files = $(this).get(0).files;
if (files.length > 0) {
// One or more files selected, process the file upload
var form = new FormData();
for (var index = 0; index < files.length; index++) {
var file = files[index];
form.append('Uploded Files', file, file.name);
}
$.ajax({
url: 'api/fileupload/upload',
type: 'POST',
data: form,
processData: false,
contentType: false,
success: function (data) {
console.log('upload successful!');
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
但是我们没有在服务器端获取文件.在服务器端,我们创建了一个Loopback api.
可以帮助我们,如何使用loopback api上传文件.
这是我的loopback api代码 - …
我开始了解 IPv6 并且我读到可以使用::ffff:前缀将 IPv4 地址映射到 IPv6 。这使我想到地址是否::ffff:127.0.0.1是指localhost,所以我写了一个简单的C程序,用途getaddrinfo()和IN6_IS_ADDR_LOOPBACK宏检查是否返回的地址是环回。
我已经用::1环回地址的其他变体测试了该程序,正如预期的那样,该程序说它是环回。但是,令我惊讶的是,当我尝试::ffff:127.0.0.1该程序时,它说不是!这怎么可能?我错过了什么吗?
这是我的程序源代码的简化版本:
struct addrinfo hints, *servinfo;
int rv;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC; // IPv4 or IPv6
hints.ai_socktype = SOCK_STREAM;
/* hostname_or_ip is entered from the command line */
if ( (rv = getaddrinfo(hostname_or_ip, NULL, &hints, &servinfo)) != 0) {
exit(1);
}
struct addrinfo *p = servinfo;
struct sockaddr_in6 *h = (struct sockaddr_in6 *) p->ai_addr;
int is_loopback = …Run Code Online (Sandbox Code Playgroud) 我是环回的新手。以前用过Sequelize ORM,看惯了Sequelize输出SQL语句到Console。我怎样才能用 Loopback 4 做同样的事情?我在网上进行了广泛的搜索,我找到了一个他们建议添加debug: true到数据源配置 json 文件的地方。然而,这种改变没有任何效果。
任何帮助是极大的赞赏。
我在使用远程方法的查找中使用简单的排序过滤器时遇到了麻烦:
/**
* This remote method exposes the meals history from the current logged in user
*/
Meal.listMeals = function(req, res, cb) {
Meal.find({
where: {patientId: req.accessToken.userId},
order: {mealDate: 'DESC'}
}, cb);
};
Meal.remoteMethod('listMeals', {
returns: {arg: 'meals', type: 'array'},
http: {path:'/list-meals', verb: 'get'},
accepts: [
{arg: 'req', type: 'object', http: {source: 'req'}},
{arg: 'res', type: 'object', http: {source: 'res'}}
]
});
Run Code Online (Sandbox Code Playgroud)
在上方,您可以看到我的remote / find实现,它在没有订单过滤器的情况下也可以正常运行。
订单{“ mealDate”:“ DESC”}无效
mealDate是我模型上的Date类型。
"properties": {
"mealDate": {
"type": "date",
"required": true,
"default": "Date.now"
}, …Run Code Online (Sandbox Code Playgroud) 我在使用Loopback获取 mongoDB 上的聚合结果时遇到一些问题。
这是我的环回配置:
这是我编写的用于执行聚合的代码:
return new Promise((resolve, reject) => {
Model.getDataSource().connector.connect(function(err, db) {
if (err)
return reject(err);
let aggregatePipe = [
{
$group: {
"_id": "$address.region",
"count": {$sum: 1},
"geoPoint": {$addToSet: "$geoPoint"}
}
}];
let results = db.collection('Location').aggregate(aggregatePipe, (err, results) => {
console.log(results);
return resolve(results);
});
});
Run Code Online (Sandbox Code Playgroud)
然而, results不包含聚合的结果,但包含游标...
AggregationCursor {
pool: null,
server: null,
disconnectHandler:
Store {
s: { storedOps: [], storeOptions: [Object], topology: …Run Code Online (Sandbox Code Playgroud) 我有以下几点:
nodemon server/server.js --watch common --watch serve
Run Code Online (Sandbox Code Playgroud)
这根本不起作用。好吧,也许是因为server/server.js不存在!所以我尝试了以下方法:
nodemon index.js --watch common --watch serve
Run Code Online (Sandbox Code Playgroud)
仍然没有用。我也改变common了src。那也不起作用。请帮我解决一下这个。
loopback ×10
node.js ×4
loopbackjs ×3
c# ×2
javascript ×2
strongloop ×2
aggregate ×1
getaddrinfo ×1
hook ×1
ip ×1
ipv6 ×1
jquery ×1
linux ×1
localhost ×1
loopback4 ×1
mongodb ×1
operation ×1
sorting ×1
tcpclient ×1
udp ×1