小编Kav*_*tel的帖子

发送TCP后,为什么endian会反转

我有一个用C#编写的客户端和一个用python编写的服务器.我通过套接字发送的消息是8个字节,后跟数据,8个字节是数据长度.

在发送之前的C#中,我将8字节数据长度转换为太大的endian,如图所示:

public void Send(SSLMsg m)
{
    string json = m.Serialize();
    byte[] data = Encoding.ASCII.GetBytes(json);
    ulong dataLen = (ulong)data.Length;
    byte[] dataLenPacked = packIt(dataLen);

    Log("Sending " + dataLen + " " + json);

    sslStream.Write(dataLenPacked);
    sslStream.Write(data);
    sslStream.Flush();

}

private byte[] packIt(ulong n)
{
    byte[] bArr = BitConverter.GetBytes(n);
    if (BitConverter.IsLittleEndian)
        Array.Reverse(bArr, 0, 8);
    return bArr;
}
Run Code Online (Sandbox Code Playgroud)

消息发送成功,我在python服务器代码中被绑定,因为unpack格式应该是正确的,不应该吗?

(length,) = unpack('>Q', data)
# len(data) is 8 here
# length is 1658170187863248538
Run Code Online (Sandbox Code Playgroud)

不是big-endian字符'>'?为什么我的长度太长了?

更新:

有一个错误,我正在解包错误的8个字节,已经修复,现在我正在解包正确的数据,我仍然有相同的问题.

(length,) = unpack('>Q', data)
# len(data) is 8 here
# …
Run Code Online (Sandbox Code Playgroud)

c# python sockets

8
推荐指数
1
解决办法
886
查看次数

在IOS和Android上反应原生fbsdk用户更改问题

我使用此(https://github.com/facebook/react-native-fbsdk)组件尝试使用Facebook为我的应用程序设置身份验证.我已成功配置它,因此登录按钮在两个平台上都给我一个有效的令牌.

问题是应用程序records successfully logged user和摆脱它是相当棘手的(只有重新安装可以帮助).此外,当您尝试在Android上的Facebook应用程序中更改登录用户时 - 它会出错:

'用户以不同的Facebook用户身份登录'

我总是收到屏幕而不是登录表单,我可以在其中输入其他凭据或至少更改帐户.

我使用提供LoginManager.logInWithReadPermissions登录,LoginManager.logOut似乎什么都不做.

那么,to give a user a choice如果登录不正确或者主-fb-app帐户发生了变化,我是否可以提出申请?

android facebook ios react-native react-native-fbsdk

7
推荐指数
1
解决办法
1183
查看次数

Angular 4动态路由

我想在angular 4应用程序中实现动态路由.我想要做的是将新的Route对象推送到Router config.代码看起来像

@
NgModule({
declarations: [
    AppViewComponent
],
imports: [
    RouterModule.forRoot([
        { path: '', redirectTo: 'home', pathMatch: 'full' },
        { path: 'home', component: HomeComponent },
        { path: 'appview', component: AppViewComponent }
        { path: '**', redirectTo: 'home' }
    ])
],
providers: []})


export class AppModuleShared {
constructor(router: Router, routerModule: RouterModule) {
    console.log('Routes: ', JSON.stringify(router.config, undefined, 1));
    router.config.push({ path: 'new/random/path', component: AppViewComponent });
    router.config.forEach((x, i) => {
        console.log(`${i}: ${JSON.stringify(x, undefined, 1)}`);
    });
}}
Run Code Online (Sandbox Code Playgroud)

当应用程序启动时,我想将新的Route Object推送到配置并转到构造函数中的新路径.执行构造函数后,在控制台日志中我有这样的事情:

5: {
    "path": "new/random/path"
}
Run Code Online (Sandbox Code Playgroud)

看起来新的Route …

angular angular-router

5
推荐指数
1
解决办法
3784
查看次数

在 Jenkins Pipeline Library 中查找未使用的端口

我目前正在努力改进我的 Jenkins Pipeline,它启动一个带有暴露端口的 Docker 容器。但由于事实上 Jenkins 实例被很多人和他们的项目大量使用,我遇到了问题,即公开的端口映射已经在使用中。

我的想法是确定主机上未使用的端口,以避免这个问题。为了做到这一点,我想用一种简单的方法来扩展我们的 Jenkins 共享库,以检查并返回主机系统中第一个未使用的端口。

有谁知道如何实现这一目标?

我当前的解决方案是利用 shell 函数,该函数以某种方式使用 netstat 工具。

文件:getRandomFreePort.groovy

def call() {
sh '''
    #!/bin/bash
    while
    [[!-z $CHECK]]; do
    PORT = $(((RANDOM % 60000) + 1025))
    CHECK = $(sudo netstat - ap | grep $PORT)
    done

    echo $PORT
'''
}
Run Code Online (Sandbox Code Playgroud)

groovy jenkins jenkins-pipeline

5
推荐指数
1
解决办法
4936
查看次数

Gcc裸属性留下一些尾随函数序言asm指令

我在cortex-m0上有一个svc异常处理程序的以下实现:

int  __attribute__((naked))  
sv_call_handler(uint32_t n, uint32_t arg1, uint32_t arg2, uint32_t arg3,  
                uint32_t arg4, uint32_t arg5)
 {
      irq_off();
Run Code Online (Sandbox Code Playgroud)

当我为cortex-m0构建它时,它看起来像这样:

   0x7a50 <sv_call_handler>        movs   r4, r0                                                                    
   0x7a52 <sv_call_handler+2>      str    r1, [r7, #12]                                                             
   0x7a54 <sv_call_handler+4>      str    r2, [r7, #8]                                                              
   0x7a56 <sv_call_handler+6>      str    r3, [r7, #4]                                                              
   0x7a58 <sv_call_handler+8>      bl     0x3194 <irq_off> 
Run Code Online (Sandbox Code Playgroud)

当然,导致硬故障,R7中的值是"未定义的",并且它很可能包含不在地址范围内的值.

当我删除裸属性时,程序集更有意义:

   0x7a50 <sv_call_handler>        push   {r4, r5, r7, lr}                                                          
   0x7a52 <sv_call_handler+2>      sub    sp, #32                                                                   
   0x7a54 <sv_call_handler+4>      add    r7, sp, #8                                                                
   0x7a56 <sv_call_handler+6>      str    r0, [r7, #12]
Run Code Online (Sandbox Code Playgroud)

我之前没有使用过裸属性,为什么现在会发生这种情况呢?与svc异常处理程序是一个特殊情况这一事实有什么关系吗?

gcc arm system-calls armv6 cortex-m

2
推荐指数
1
解决办法
273
查看次数

Angular2 / Spring Boot允许在PUT上交叉原点

我的Web应用程序存在一个小问题:一个与spring boot API连接的angular2应用程序。

我无法从angular2应用访问我的请求。我收到此错误:

Failed to load http://localhost:8080/deliveryMan/: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access.
Run Code Online (Sandbox Code Playgroud)

Java代码:

@RestController
@RequestMapping(value = "/deliveryMan")
@CrossOrigin
public class DeliveryManController {

    @Autowired
    DeliveryManService deliveryManService;

    @RequestMapping(value = "/getAllDeliveryMan", method = RequestMethod.GET)
    public Iterable<DeliveryMan> getAllDeliveryMan(){
        return deliveryManService.findAll();
    }

    @RequestMapping(method = RequestMethod.PUT, consumes = "application/json")
    public DeliveryMan addDeliveryMan(@RequestBody DeliveryMan deliveryMan) throws InvalidObjectException {
        deliveryManService.save(deliveryMan);
        return deliveryMan;
    }

@SpringBootApplication
@EnableAutoConfiguration
@ComponentScan
public class MyApp{

    public static void main(String[] args) {
        SpringApplication.run(MyApp.class, …
Run Code Online (Sandbox Code Playgroud)

javascript java spring angular

1
推荐指数
1
解决办法
2810
查看次数