小编use*_*421的帖子

与so_reuseaddr相关的问题

我正在阅读以下关于“so_reuseaddr 到底做什么?”的答案。

此套接字选项告诉内核,即使此端口正忙(处于 TIME_WAIT 状态),仍要继续并重用它。如果它很忙,但处于其他状态,您仍然会收到地址已在使用中的错误。如果您的服务器已关闭,然后立即重新启动,而其端口上的套接字仍处于活动状态,则此功能非常有用。您应该意识到,如果出现任何意外数据,可能会使您的服务器感到困惑,但虽然这是可能的,但可能性不大。
有人指出,'一个套接字是一个5元组(proto、本地地址、本地端口、远程地址、远程端口)。SO_REUSEADDR 只是表示您可以重用本地地址。5 元组仍然必须是唯一的!作者:迈克尔·亨特 (mphunter@qnx.com)。这是事实,这就是为什么您的服务器不太可能看到意外数据的原因。危险在于这样的 5 元组仍然在网络上浮动,并且当它四处浮动时,来自同一系统上同一客户端的新连接碰巧获得相同的远程端口。Richard Stevens 在#2.7“请解释 TIME_WAIT 状态”中解释了这一点。

我只是无法得到最后几行The danger is....TIME_WAIT state.它说如果网上仍然有相同的浮动元组那么......但是如果 1 小时后还有相同的元组怎么办?我不明白,有人能解释一下吗?

sockets tcp bind

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

防止TCP套接字连接重试

如何防止TCP进行多个套接字连接尝试?

背景

我试图粗略估计一下客户的往返时间.我必须使用的高级协议无法确定RTT,也没有任何类型的无操作请求/响应流程.所以,我试图直接从较低层获取信息.特别是,我知道客户端将主动拒绝特定端口上的TCP连接尝试.

Me -> Client: SYN
Client -> Me: ACK, RST
Run Code Online (Sandbox Code Playgroud)

  long lStartTime = System.nanoTime() / 1000000;
  long lEndTime;

  // Attempt to connect to the remote party.  We don't mind whether this
  // succeeds or fails.
  try
  {
    // Connect to the remote system.
    lSocket.connect(mTarget, MAX_PING_TIME_MS);

    // Record the end time.
    lEndTime = System.nanoTime() / 1000000;

    // Close the socket.
    lSocket.close();
  }
  catch (SocketTimeoutException|IOException lEx)
  {
    lEndTime = System.nanoTime() / 1000000;
  }

  // Calculate the interval.
  lInterval = …
Run Code Online (Sandbox Code Playgroud)

java language-agnostic sockets tcp

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

通过存储在字符串中的名称调用方法而无需反射 API?

我知道,使用反射 API,我们可以通过存储在字符串中的名称来调用方法。

但是,反射 API 不能用于高性能应用程序。在我的应用程序中,方法将以非常高的速度被调用。所以,我不能使用反射 API。

那么,反射 API 的替代方案是什么?

我做了研究,发现可以使用 cglib 和其他代码生成库。

但是,我没有找到任何通过存储在字符串中的名称来调用方法的示例。

使用反射替代方案的示例也很好。

更新: 实际上我正在实现一些主从通信 API。其中,slave 将远程调用 master 方法。而且,方法调用的速率非常高(每秒大约 50 次方法调用)。因为,主机不断轮询从机以获取任何响应。那么,我应该在如此高的调用率下进行反思吗?

java reflection cglib

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

Windows 上的 TcpWindowSize 与套接字缓冲区大小

TcpWindowSize 和 Socket Buffer Sizes 有什么区别?

我假设 TcpWindowSize 只能使用注册表设置更改,而套接字缓冲区大小可以使用 SO_SNDBUF 和 SO_RCVBUF 套接字参数更改?

network-programming tcp

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

在Java中完成TLS握手之前accept()是否返回?

我正在使用 Java 的 SSL 库来保护我的应用程序之间的连接。我注意到SSLServerSocket.accept()即使握手失败也会返回一个套接字。

  • 这是否意味着SSLServerSocket.accept()不会等到初始握手完成?和
  • 如果没有,我如何等待握手完成并检测握手失败的客户端?或者我可以简单地开始操作新的SSLSocket,握手会在实际操作之前自动完成吗?

此外,在当前握手完成之前,写入和读取当前(重新)握手的 SSLSocket 是否会阻塞?如果不是,在握手套接字上操作是否安全?握手和应用程序数据是否会并行发送且互不影响?

java sockets ssl jsse handshake

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

JNI的UnsatisfiedLinkError

.h文件

#include <jni.h>
#include "NativePackage_HelloWorld.h"
#include <stdio.h>

JNIEXPORT void JNICALL Java_NativePackage_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)   {
printf("Hello world!\n");
return;
}
Run Code Online (Sandbox Code Playgroud)

爪哇

package NativePackage;

public class HelloWorld {
public native void displayHelloWorld();

static {
    System.loadLibrary("hello");
}

public static void main(String[] args) {
    new HelloWorld().displayHelloWorld();
}
}
Run Code Online (Sandbox Code Playgroud)

.c文件

#include <jni.h>
#include "NativePackage_HelloWorld.h" 
#include <stdio.h>

JNIEXPORT void JNICALL Java_NativePackage_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj){
printf("Hello world!\n");
return;
}
Run Code Online (Sandbox Code Playgroud)

我已经使用编译了.c文件

gcc -I /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home/include/ -I  /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home/include/darwin/ -fPIC -o hello -c   HelloWorldImp.c 
Run Code Online (Sandbox Code Playgroud)

但是,尝试使用运行会java NativePackage/HelloWorld产生以下错误:

java  -Djava.library.path=NativePackage/ NativePackage/HelloWorld …
Run Code Online (Sandbox Code Playgroud)

java java-native-interface unsatisfiedlinkerror

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

如何解决:java.io.IOException:Stream关闭

这是一个以流方式解析JSON结构的程序.这是晚上10点,我的大脑很累,这就是为什么我似乎无法弄清楚为什么我得到异常:java.io.Exception:Stream关闭.

如果这里的专家可以帮助我摆脱这个例外,我会感谢帮助我在这个夜晚解决这个问题.

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;

import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.*;

import java.util.Properties;

public class JacksonStreaming {

    public static void main(String[] args) {
        System.out.println("Entered Main");
        try {
            new JacksonStreaming().getNames();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

ObjectMapper jsonMapper = new ObjectMapper();
JsonFactory jsonFactory = new JsonFactory();

Properties prop = new Properties();
String filePath = "";
final String[] path = new String[] {"myReport", "docReports", "part1/.", "myAnalysis", "matches", "name"};

void getNames()  {
    System.out.println("Entered getNames"); 
    //final String …
Run Code Online (Sandbox Code Playgroud)

java

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

__SOCKADDR_COMMON (sin_) 是什么意思?

我正在跟踪一段代码,其中使用预定义的 struct sockaddr_in 的作者编写的代码host_addr.sin_family = AF_INET;试图在 Linux(Ubuntu)中设置一个迷你网络服务器。但是sin_family并没有出现在struct sockaddr_in定义中的任何地方。__SOCKADDR_COMMON (sin_)定义中包含的 是否有特殊含义?

在网络服务器的源文件中,他包含<sys/socket.h>, <netinet/in.h>, <arpa/inet.h>一个使用 Linux 库的预定义库。

我发现

#define __SOCKADDR_COMMON(sa 前缀) \
sa_family_t sa_prefix##family

在他使用的linux的库文件之一中。

我不明白这个定义。一点一点的解释会很好。

如果他通过参数定义了套接字的协议,为什么他必须设置套接字地址系列?

c linux network-programming websocket

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

为什么我们必须在TCP服务器套接字编程中获得两个文件描述符?

我把这个教程用于服务器套接字编程链接.对于功能,我没有问题,我要问的是更多关于架构设计问题.请看一下教程.我们实际上看到两个文件描述符,一个在调用时socket(),一个在调用时accept().在创建套接字时我们获取文件描述符是有道理的,因为我们将套接字视为文件; 在接受不同的连接时,我们必须拥有多个文件描述符.但是,为什么我们需要两者都让它发挥作用?

sockets network-programming tcp

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

Apache POI - FileInputStream工作,File对象失败(NullPointerException)

我尝试将所有工作表从一个工作簿复制到另一个工作簿.问题是,如果我通过FileInputStreams读取工作簿,它会正常工作,但它不适用于文件对象.

请考虑以下方法:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;

import org.apache.commons.io.IOUtils;
import org.apache.commons.io.filefilter.WildcardFileFilter;
import org.apache.poi.EncryptedDocumentException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.SpreadsheetVersion;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.DataConsolidateFunction;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.ss.util.AreaReference;
import org.apache.poi.ss.util.CellReference;
import org.apache.poi.xssf.usermodel.XSSFPivotTable;
import org.apache.poi.xssf.usermodel.XSSFSheet;


public void copyAllSheetsAcrossWorkbook(String oldWorkbook, String newWorkbook)
        throws EncryptedDocumentException, InvalidFormatException, IOException {
    FileInputStream fisOld = null;
    FileInputStream fisNew = …
Run Code Online (Sandbox Code Playgroud)

java excel nullpointerexception apache-poi

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