我正在阅读以下关于“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 小时后还有相同的元组怎么办?我不明白,有人能解释一下吗?
如何防止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) 我知道,使用反射 API,我们可以通过存储在字符串中的名称来调用方法。
但是,反射 API 不能用于高性能应用程序。在我的应用程序中,方法将以非常高的速度被调用。所以,我不能使用反射 API。
那么,反射 API 的替代方案是什么?
我做了研究,发现可以使用 cglib 和其他代码生成库。
但是,我没有找到任何通过存储在字符串中的名称来调用方法的示例。
使用反射替代方案的示例也很好。
更新: 实际上我正在实现一些主从通信 API。其中,slave 将远程调用 master 方法。而且,方法调用的速率非常高(每秒大约 50 次方法调用)。因为,主机不断轮询从机以获取任何响应。那么,我应该在如此高的调用率下进行反思吗?
TcpWindowSize 和 Socket Buffer Sizes 有什么区别?
我假设 TcpWindowSize 只能使用注册表设置更改,而套接字缓冲区大小可以使用 SO_SNDBUF 和 SO_RCVBUF 套接字参数更改?
我正在使用 Java 的 SSL 库来保护我的应用程序之间的连接。我注意到SSLServerSocket.accept()即使握手失败也会返回一个套接字。
SSLServerSocket.accept()不会等到初始握手完成?和SSLSocket,握手会在实际操作之前自动完成吗?此外,在当前握手完成之前,写入和读取当前(重新)握手的 SSLSocket 是否会阻塞?如果不是,在握手套接字上操作是否安全?握手和应用程序数据是否会并行发送且互不影响?
.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) 这是一个以流方式解析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) 我正在跟踪一段代码,其中使用预定义的 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的库文件之一中。
我不明白这个定义。一点一点的解释会很好。
如果他通过参数定义了套接字的协议,为什么他必须设置套接字地址系列?
我把这个教程用于服务器套接字编程链接.对于功能,我没有问题,我要问的是更多关于架构设计问题.请看一下教程.我们实际上看到两个文件描述符,一个在调用时socket(),一个在调用时accept().在创建套接字时我们获取文件描述符是有道理的,因为我们将套接字视为文件; 在接受不同的连接时,我们必须拥有多个文件描述符.但是,为什么我们需要两者都让它发挥作用?
我尝试将所有工作表从一个工作簿复制到另一个工作簿.问题是,如果我通过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)