小编log*_*off的帖子

setSoTimeout的功能是什么以及它如何工作?

我正试图自己学习Socket.关注Oracle网站上的文字我有点困惑.我对此有一些疑问.提前感谢任何明确的解释.

setSoTimeout

public void setSoTimeout(int timeout)抛出SocketException

使用指定的超时启用/禁用SO_TIMEOUT,以毫秒为单位.如果将此选项设置为非零超时,read()InputStream与此Socket关联的调用将仅阻止这段时间.如果超时到期,java.net.SocketTimeoutException则会引发a,尽管Socket仍然有效.必须在进入阻止操作之前启用该选项才能生效.超时必须> 0.超时为零被解释为无限超时.

  1. 什么是SO_TIMEOUT?
  2. 套接字是连接的端点.如果我说

    mySocket.setSoTimeout(2000);
    
    Run Code Online (Sandbox Code Playgroud)

    这是否意味着我阻止从服务器/客户端读取此套接字的任何输入2000毫秒,在此之后套接字已准备好读取数据?

  3. 超时到期是什么意思?

  4. 在阻止操作之前必须启用哪个选项?

  5. 无限超时意味着套接字不再读取?

java connection networking

45
推荐指数
3
解决办法
10万
查看次数

将C++函数指针转换为c函数指针

我正在使用C库开发C++应用程序.我必须向C库发送一个函数指针.

这是我的班级:

 class MainWindow : public QMainWindow {  
     Q_OBJECT  
     public:  
     explicit MainWindow(QWidget *parent = 0);  
     private:  
     Ui::MainWindow *ui;
     void f(int*);

 private slots:
     void on_btn_clicked(); 
};
Run Code Online (Sandbox Code Playgroud)

这是我的on_btn_clicked函数:

void MainWindow::on_btn_clicked()
{
    void (MainWindow::* ptfptr) (int*) = &MainWindow::f;

    c_library_function(static_cast<void()(int*)>(ptfptr), NULL);

}
Run Code Online (Sandbox Code Playgroud)

C函数应该得到一个指向这样一个函数的指针:void f(int*).但上面的代码不起作用,我无法成功将我的f成员函数转换为所需的指针.

有人可以帮忙吗?

c c++ pointers function-pointers

21
推荐指数
4
解决办法
2万
查看次数

将LongBuffer/IntBuffer/ShortBuffer转换为ByteBuffer

我知道一种快速的方法将byte/short/int/long数组转换为ByteBuffer,然后获取一个字节数组.例如,要将字节数组转换为短数组,我可以这样做:

byte[] bArray = { 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 };

ByteBuffer bb = ByteBuffer.wrap(byteArray);
ShortBuffer sb = bb.asShortBuffer();
short[] shortArray = new short[byteArray.length / 2];
sb.get(shortArray);
Run Code Online (Sandbox Code Playgroud)

产生一个这样的短数组:[256, 0, 0, 0, 256, 0, 0, 0].

如何使用java.nio类进行逆操作?

现在我这样做:

shortArray[] = {256, 0, 0, 0, 256, 0, 0, 0};
ByteBuffer bb = ByteBuffer.allocate(shortArray.length * 2);
for (short s : shortArray) {
    bb.putShort(s);
}
return bb.array();
Run Code Online (Sandbox Code Playgroud)

我获得了原始的[1, …

java arrays nio bytearray

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

Docker 内部具有私有依赖项的工作 Poetry 项目

我有一个托管在Google Cloud Platform ArtifactRegistry中的 Python 库。此外,我有一个使用Poetry 的Python 项目,它依赖于该库。

\n

这是我的项目文件pyproject.toml

\n
[tool.poetry]\nname = "Test"\nversion = "0.0.1"\ndescription = "Test project."\nauthors = [\n    "Me <me@mycompany.com>"\n]\n\n[tool.poetry.dependencies]\npython = ">=3.8,<4.0"\nmylib = "0.1.1"\n\n[tool.poetry.dev-dependencies]\n"keyrings.google-artifactregistry-auth" = "^1.1.0"\nkeyring = "^23.9.0"\n\n[build-system]\nrequires = ["poetry-core>=1.1.0"]\nbuild-backend = "poetry.core.masonry.api"\n\n[[tool.poetry.source]]\nname = "my-lib"\nurl = "https://us-east4-python.pkg.dev/my-gcp-project/my-lib/simple/"\nsecondary = true\n\n
Run Code Online (Sandbox Code Playgroud)\n

为了启用我的私有存储库,我安装了gcloud CLI并使用我的凭据进行了身份验证。因此,当我运行此命令时,我会看到正确的结果,如下所示:

\n
$ gcloud auth list\nACTIVE  ACCOUNT\n...\n*       <my-account>@appspot.gserviceaccount.com\n...\n
Run Code Online (Sandbox Code Playgroud)\n

此外,我将Python 密钥环与keyrings.google-artifactregistry-auth一起使用,正如您在项目文件中看到的那样。

\n

因此,通过此设置,我可以运行poetry install,使用 GCP 的身份验证从我的私有工件注册表下载依赖项。

\n
\n

当我尝试在 Docker 容器中应用相同的原则时,问题就出现了。

\n

我创建了一个像这样的 …

python python-keyring gcloud python-poetry google-artifact-registry

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

带有Controller的简单Spring Boot项目中的"循环视图路径"

我有一个简单的Spring Boot项目和这个Gradle构建文件:

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'spring-boot'
apply plugin: 'war'

sourceCompatibility = 1.7
targetCompatibility = 1.7

version = '1.0'

buildscript {
    ext {
        springBootVersion = '1.1.9.RELEASE'
    }
    repositories {
        maven { url "http://repo.spring.io/libs-snapshot" }
        mavenLocal()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.1.9.RELEASE")
    }
}

jar {
    manifest {
        attributes 'Implementation-Title': 'Potlatch Server', 'Implementation-Version': version
    }
}

war {
    baseName = 'gs-convert-jar-to-war'
    version =  '0.1.0'
}

repositories {
    mavenCentral()
    maven { url "http://repo.spring.io/libs-snapshot" }
    maven { url "http://maven.springframework.org/milestone" }
} …
Run Code Online (Sandbox Code Playgroud)

rest spring-boot

9
推荐指数
2
解决办法
4万
查看次数

获取字符串之间的整数差异就像strcmp一样

我只需要一个函数,对于两个给定的字符串,它将返回负值,正值或零值.在C中,strcmp使用:

char* a = "Hello";
char* b = "Aargh";

strcmp(a, b);  //-1
strcmp(a, a);  //0
strcmp(b, a);  //1
Run Code Online (Sandbox Code Playgroud)

Java是否有任何简单直观的方法,或者我是否必须使用该Comparator界面?

java string-comparison

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

Spring Tools Suite 内存不断增加

我最近开始使用 Spring Tools Suite (STS 2.7.2),随着您的继续工作,IDE 消耗的内存似乎不断增加。到目前为止,IDE 的使用非常有限(没有大量的服务器集成等...) - 只有 4-5 个 Spring 项目正在开发,集成了几个插件:Maven 和 Perforce。

据统计,STS工作台启动时,内存消耗约为300MB左右,但逐渐增加至800MB左右。

然后我唯一的选择就是重新启动 IDE(在我的系统明显内存不足之后)。

这是一个已知的问题?有什么解决方法可以避免这种情况,或者检查可能导致这种情况的原因吗?

java sts-springsourcetoolsuite

5
推荐指数
2
解决办法
9956
查看次数

我可以使用Java NIO从Socket读取可用字节吗?

我想知道在Java NIO套接字中是否有可读字节.在C/C++中,可以使用以下内容完成:

int available(int fd){
  long readable = 0;

    if (ioctl(fd, FIONREAD, &readable) < 0){
      // error
    }

  return (int) readable;
}
Run Code Online (Sandbox Code Playgroud)

可以使用Java NIO(使用SocketChannel,Selector,Socket等)执行相同的操作吗?

java sockets nio

5
推荐指数
2
解决办法
3940
查看次数

OSGi中的类路径扫描

我的项目有一组自定义的注释,可以存在于OSGi 4.3框架中部署的任何bundle中.我想在类路径中找到任何带有这些注释的类.我尝试为找到的每个类使用BundleWiring.listResources(...)Bundle.loadClass(...).我用一小组bundle做了一些测试,它需要大约200MB的Permanent Generation JVM内存空间,因为所有的类都被加载了.

当程序意识到它们没有这些注释时,有没有办法释放加载的类PermGen内存空间?

有没有更好的方法在OSGi框架中查找带注释的类?

osgi classpath permgen

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

带有Spring Boot REST控制器和JSON的空字段

我有一个带有这个Gradle构建文件的Spring Boot应用程序:

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'spring-boot'
apply plugin: 'war'

sourceCompatibility = 1.7
targetCompatibility = 1.7

version = '1.0'

buildscript {
    ext {
        springBootVersion = '1.1.9.RELEASE'
    }
    repositories {
        maven { url "http://repo.spring.io/libs-snapshot" }
        mavenLocal()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.1.9.RELEASE")
    }
}

jar {
    manifest {
        attributes 'Implementation-Title': 'Server', 'Implementation-Version': version
    }
}

war {
    baseName = 'gs-convert-jar-to-war'
    version =  '0.1.0'
}

repositories {
    mavenCentral()
    maven { url "http://repo.spring.io/libs-snapshot" }
    maven { url "http://maven.springframework.org/milestone" }
}

dependencies …
Run Code Online (Sandbox Code Playgroud)

rest json spring-boot

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

反制允许重复

我有一个交通灯枚举定义可能的状态:

class TrafficLightPhase(Enum):
    RED = "RED"
    YELLOW = "YELLOW"
    GREEN = "GREEN"
Run Code Online (Sandbox Code Playgroud)

我轮询一个交通信号灯每秒获取当前状态,然后我将这些值放入a deque函数中:

def read_phases():
    while running:
        current_phase = get_current_phase_phases()
        last_phases.append(current_phase)
        time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

我想对相同状态的序列进行分组,以便了解交通信号灯的相位时序.

我尝试使用Countercollections,如下所示:

counter = collections.Counter(last_phases)
Run Code Online (Sandbox Code Playgroud)

它组合了很好的不同状态,但我不知道下一个周期何时开始.是否有类似的数据结构Counter允许重复?所以我可以得到如下结果:

Counter({
         'RED': 10,
         'GREEN': 10, 
         'YELLOW': 3,
         'RED': 10,
         'GREEN': 10, 
         'YELLOW': 3,
         'RED': 10,
         'GREEN': 10, 
         'YELLOW': 3
        })
Run Code Online (Sandbox Code Playgroud)

而不是:反击({'RED':30,'GREEN':30,'YELLOW':9})

python python-3.x python-collections

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

"java.security.AccessControlException:access denied"执行签名的Java Applet

我有一个小Java小程序,我有一个恼人的问题.我使用jarsigner工具(遵循这些说明)使用我自己的密钥库签署了我的JAR .

Java Applet下载已签名的 JAR并尝试使用扩展类URLClassLoader启动它.这个JAR试图执行这行代码:

ClassLoader.getSystemClassLoader().getResource("aResource");
Run Code Online (Sandbox Code Playgroud)

它失败了,堆栈跟踪很大,完成了:

Caused by: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "getClassLoader")
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:366)
    at java.security.AccessController.checkPermission(AccessController.java:555)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
    at java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:1476)
    at test.SecondJAR.main(SecondJAR.java:8)
Run Code Online (Sandbox Code Playgroud)

(test.SecondJAR的第8行对应于getResource(...)方法

启动Java Applet时,如果用户信任发布者,则会提示用户接受证书:

给用户的消息

即使我接受它,也会发生异常.即使我安装了证书,并且自动接受了提示消息,也会发生异常.

我也试过这个:

AccessController.doPrivileged(new PrivilegedAction<Object>() {
    public Object run() {
        ClassLoader.getSystemClassLoader().getResource("aResource");
        return null;
    }
});
Run Code Online (Sandbox Code Playgroud)

它失败了同样的例外.

任何帮助,将不胜感激!

java browser security applet accesscontrolexception

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

对 Terraform 中其他模块资源的引用

我的 Terraform Cloud git 项目中有这样的层次结构:

\n\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 aws\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 flavors\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.tf\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.tf\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 security-rules\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 sec-rule1\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.tf\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 vms\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 vm1\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.tf\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.tf\n
Run Code Online (Sandbox Code Playgroud)\n\n

所有主main.tf文件都包含带有子文件夹的模块定义:

\n\n

/main.tf:

\n\n
terraform {\n  required_version = "~> 0.12.0"\n\n  backend "remote" {\n    hostname = "app.terraform.io"    \n    organization = "foo"\n\n    workspaces {\n      name = "bar"\n    }\n  }\n  required_providers {\n    openstack = "~> 1.24.0"\n  }\n}\n\nmodule "aws" {\n  source = "./aws"\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

/aws/main.tf:

\n\n
module …
Run Code Online (Sandbox Code Playgroud)

terraform terraform-provider-openstack terraform0.12+ terraform-cloud

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