标签: tcpsocket

如何断开NodeJs中的tcp套接字

我使用以下命令连接到NodeJs中的套接字服务器:

client = net.createConnection()
Run Code Online (Sandbox Code Playgroud)

如何才能正确断开与服务器的连接?

我试过client.end()甚至client.destroy()

但是当我使用netstat检查连接状态时,它显示连接处于FIN_WAIT2状态.

如何完全关闭并破坏连接?

javascript sockets tcpsocket node.js

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

通过TCP套接字接收可变大小的数据

我在通过(TCP)套接字传输数据时遇到了一个小问题.关于我在做什么的小背景:

我将数据从A侧发送到B.发送的数据可以是可变长度,假设最大大小为1096字节.

A) send(clientFd, buffer, size, NULL)
Run Code Online (Sandbox Code Playgroud)

在B上,因为我不知道期望的大小,我总是尝试接收1096字节:

B) int receivedBytes = receive(fd, msgBuff, 1096, NULL)
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时:我意识到A正在发送小块数据......大约80-90字节.经过几次发送后,B将他们聚集在一起,收到的是1296.这显然已经破坏了数据,地狱崩溃了.

为了解决这个问题,我将数据分为两部分:标题和数据.

struct IpcMsg
{
   long msgType;
   int devId;
   uint32_t senderId;
   uint16_t size; 
   uint8_t value[IPC_VALUES_SIZE]; 
};
Run Code Online (Sandbox Code Playgroud)

在一边:

A) send(clientFd, buffer, size, NULL)
Run Code Online (Sandbox Code Playgroud)

在B上,我首先收到标头并确定要接收的有效负载的大小:然后接收剩余的有效负载.

B) int receivedBytes = receive(fd, msgBuff, sizeof(IpcMsg) - sizeof( ((IpcMsg*)0)->value ), 0);
int sizeToPoll = ((IpcMsg*)buffer)->size;
printf("Size to poll: %d\n", sizeToPoll);

if (sizeToPoll != 0)
{
        bytesRead = recv(clientFd, buffer + receivedBytes, sizeToPoll, 0); 
}
Run Code Online (Sandbox Code Playgroud)

因此,对于每个有有效载荷的发送,我最终都会调用两次接收.这对我有用,但我想知道是否有更好的方法来做到这一点?

c++ sockets networking network-programming tcpsocket

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

浏览器上的WebSocket客户端可以与TCP Socket服务器通信吗?

是否可以运行TCP Socket服务器来接受来自WebSocket客户端的传入连接?我有一个TCP Socket服务器,我希望能够在浏览器中测试它.这可能吗?

html5 tcpsocket websocket

6
推荐指数
2
解决办法
8335
查看次数

java 中是否存在以下 Aes 加密函数的 Dart 等效项

我已经设置了一个服务器,它通过下面提到的 java 函数侦听加密的字节数组。早些时候,我使用 java (android) 来构建我的应用程序,因此使用相同的 java 函数很容易,但我无法弄清楚该函数的 dart 等效项(flutter)是什么,该函数接受字符串作为输入并返回 AES 加密字节数组作为输出,我可以将其写入 TCP 套接字。

另外,我非常感谢您帮助了解如何将生成的字节数组写入服务器,然后读取类似的响应并通过 dart (颤振)对其进行解密

我已经成功地编写了简单的字符串并通过 dart 接收简单的字符串作为 tcp 服务器的输入和输出,但无法对加密的字节数组执行相同的操作。在java中,我使用DataOutputStream将响应发送到服务器,如下所示

DataOutputStream dOut = newDataOutputStream(socket.getOutputStream());

           byte[] s2 = Encrypt3.encrypt2(myString);

           dOut.writeInt(s2.length); // write length of the message
            dOut.write(s2);
Run Code Online (Sandbox Code Playgroud)

这是我用于aes加密的java函数

import java.security.Key;

import javax.crypto.Cipher;

import javax.crypto.spec.SecretKeySpec;


public class Encrypt3 {
public static String key = "mykey";

public static byte[] encrypt2(String text ){
    String encrypt ="";

    try{
        // Create key and cipher
        Key aesKey = new SecretKeySpec(key.getBytes(), "AES");
        Cipher cipher = Cipher.getInstance("AES"); …
Run Code Online (Sandbox Code Playgroud)

java serversocket tcpsocket flutter

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

Ruby TCPServer套接字

也许我已经把我的套接字编程方式混淆了,但不应该像这样的工作吗?

srv = TCPServer.open(3333)
client = srv.accept

data = ""
while (tmp = client.recv(10))
    data += tmp
end
Run Code Online (Sandbox Code Playgroud)

我几乎尝试了从客户端TCPSocket"获取"数据的所有其他方法,但所有这些方法都挂起并且永远不会突破循环(getc,get,read等).我觉得我忘记了什么.我错过了什么?

ruby tcpsocket tcpserver

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

Ruby TCPSocket:找出可用的数据量

有没有办法找出Ruby中TCPSocket上有多少字节的数据可用?即没有阻塞可以准备多少字节?

ruby sockets nonblocking tcpsocket

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

负载均衡器可扩展性和最大#tcp端口

负载均衡器将根据其运行的平台对可以同时使用的tcp端口数量进行一些限制(例如,我在某处读取Linux可以同时打开最多65535个tcp端口).这意味着平衡器成为瓶颈,即使后端服务器场能够同时提供更多请求,也无法提供超出同时多个请求的服务.有办法克服这个问题吗?

scalability load-balancing tcpsocket

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

TCPServer如何从Ruby中的http请求接收数据?

通过以下方式将服务器响应发送到客户端很方便

server = TCPServer.open 1234

socket = server.accept

socket.puts 'data from server side'
Run Code Online (Sandbox Code Playgroud)

在客户端,在这种情况下卷曲

curl -v localhost:1234

*   Trying 127.0.0.1... connected
* Connected to localhost (127.0.0.1) port 1234 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5
> Host: localhost:1234
> Accept: */*
> 
data from server side
Run Code Online (Sandbox Code Playgroud)

在这一点上,似乎我仍然可以在 curl 中输入一些东西,所以我假设 tcp 连接是双向的,我输入

data from the curl client 
Run Code Online (Sandbox Code Playgroud)

之后,如何从当前 TCPSocket 实例中的 curl 客户端接收此消息?

我试过了

socket.read
Run Code Online (Sandbox Code Playgroud)

但它不起作用

ruby tcpsocket

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

Ruby:int32的4字节数组

从中读取4个字节TCPSocket(实际上socket返回一个字符串,然后我调用.bytes以获取一个数组).现在他们需要转换为int32 big endian.

或者可能TCPSocket有一些方法立即读取int32?

ruby arrays int32 type-conversion tcpsocket

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

如何将24位整数转换为3字节数组?

嘿我完全超出了我的深度,我的大脑开始受伤... :(

我需要转换一个整数,以便它适合3字节数组.(是24位int?)然后再返回通过套接字从字节流发送/接收这个数字

我有:

NSMutableData* data = [NSMutableData data];

 int msg = 125;

 const void *bytes[3];

 bytes[0] = msg;
 bytes[1] = msg >> 8;
 bytes[2] = msg >> 16;

 [data appendBytes:bytes length:3];

 NSLog(@"rtn: %d", [[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] intValue]);

 //log brings back 0
Run Code Online (Sandbox Code Playgroud)

我想我的主要问题是我不知道如何检查我确实正确地转换了我的int,这也是我需要做的转换以及发送数据.

任何帮助非常感谢!

bytearray objective-c nsdata bytestring tcpsocket

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