标签: tcpclient

TCP 服务器上的 SslStream 无法通过 RemoteCertificateNotAvailable 验证客户端证书

这个问题是关于解决SslPolicyError.RemoteCertificateNotAvailable错误的。

我开发了一个带有 SSLStream 的 TCP 服务器和另一端的 TCP 客户端。

我使用以下方式验证服务器:

sslStream.BeginAuthenticateAsServer 
Run Code Online (Sandbox Code Playgroud)

我通过以下方式对客户端进行身份验证:

sslStream.BeginAuthenticateAsClient
Run Code Online (Sandbox Code Playgroud)

我正在从 加载我的客户端证书Trusted Publishers - Local Machine

两者都在同一台机器上运行。

我尝试从 .cer 和 .pfx 文件加载客户端证书,而不是从受信任的发布者存储中加载客户端证书。但是服务器的客户端(远程)证书验证器回调因发现SslPolicyErrors错误而失败RemoteCertificateNotAvailable

ssl cryptography certificate tcpclient sslstream

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

用NodeJS编写的简单TCP服务器中的socket.emit?

[如你所见,我不明白一个TCP服务器和客户端的基本概念非常好,大概socket.emit甚至是不可能的,但我想知道的最佳替代品或类似的事情...]

Socket.io有一个发送事件并在另一侧捕获它们的美妙事物,它在它的第一页(http://socket.io).我可以使用NodeJS的常规'net'模块做类似的事吗?如果不是那么相同的是什么?

我试过了:

server.js

var server = net.createServer(function(socket) {
    socket.on("connect",function() {
        socket.emit('test',{msg : 'did you get it ?'});
    });
}).listen(8000);
Run Code Online (Sandbox Code Playgroud)

client.js

var client = net.createConnection(8000, localhost);
client.on('connect',function(){
    client.on('test',function(data) {
        console.log(data.toString());
    });
});
Run Code Online (Sandbox Code Playgroud)

但是你可以想象,它不起作用.我怎样才能做到这一点?

提前致谢.

tcp tcpclient node.js socket.io

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

TcpClient TimeOuts与NetworkStream TimeOuts

在以下通用场景中:

System.Net.Sockets.TcpClient TC = SomeHowObtained;
System.Net.Sockets.NetworkStream NS = TC.GetStream();
Run Code Online (Sandbox Code Playgroud)

据我所知,有3次超时:

NS.ReadTimeout // 1
TC.SendTimeout // 2
TC.ReceiveTimeout // 3
NS.WriteTimeout // 4
Run Code Online (Sandbox Code Playgroud)

在行为意义上是(1)=(3)和(2)=(4)?文档没有给出提示.

c# timeout networkstream tcpclient

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

列出 Java 中打开的 TCP 连接

我想知道如何列出系统上使用 Java 打开的所有 TCP 连接。我正在使用 CentOS。

我也不知道从哪里开始。任何指针都会有所帮助。

提前致谢

感谢您的提示,我必须做这样的事情

Q) 为当前正在侦听的所有 tcp 端口识别任何新建立的连接,
并继续每 5 秒轮询一次。当不再有任何已建立的连接时,脚本应终止。

public class TCPConnections {

    public HashSet<Integer> establishedConnections = new HashSet<Integer>();
    public HashSet<Integer> listeningConnections = new HashSet<Integer>();

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TCPConnections tcpConnections = new TCPConnections();
        try{        
            do{    
                tcpConnections.getListeningConnections();
                Thread.sleep(5000);
                tcpConnections.getEstablishedConnections();    
            }while(!tcpConnections.establishedConnections.isEmpty());    
        }    
        catch(Exception ex){    
            ex.printStackTrace();    
        }
    }

    public void getEstablishedConnections(){
        String netstat = new String();    
        try {    
                String line;
                establishedConnections = new HashSet<Integer>();
                String[] cmd = { …
Run Code Online (Sandbox Code Playgroud)

java linux tcp tcpclient

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

Indy TCPClient OnDisconnect事件无法正常工作

type
  TForm8 = class(TForm)
    idtcpclnt1: TIdTCPClient;
    idtcpsrvr1: TIdTCPServer;
    procedure FormCreate(Sender: TObject);
    procedure idtcpsrvr1Execute(AContext: TIdContext);
    procedure idtcpclnt1Disconnected(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form8: TForm8;

implementation

{$R *.dfm}

procedure TForm8.FormCreate(Sender: TObject);
begin
  idtcpclnt1.Connect;
end;

procedure TForm8.idtcpsrvr1Execute(AContext: TIdContext);
begin
  AContext.Connection.Disconnect(true); //this gets called
end;

procedure TForm8.idtcpclnt1Disconnected(Sender: TObject);
begin
  ShowMessage('true'); //but this does not
end;
Run Code Online (Sandbox Code Playgroud)

OnDC永远不会得到处理.为什么?

delphi networking indy tcpclient

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

TCP/IP基础:目标端口相关性

好吧这有点令人尴尬,但我只是有一个相当"noob"的问题.

在客户端服务器TCP通信中,我的系统是访问远程服务器的客户端,例如端口XX,客户端是否在其系统中打开一个随机端口YY以与远程端口XX通信?所以当我们编码时,我们确实指定了目标端口XX吗?

对于客户端,在创建套接字时选择端口YY本身,不是吗?

无论如何我可以监控/限制/控制任何客户端与特定服务器通信吗?(比如说客户在特定服务端口与服务器通信?)

是否存在任何IPTABLE规则或某些限制客户端的防火墙规则?可以这样做吗?

目标端口是否保存在套接字结构中?如果是这样的话?

谢谢!

linux network-programming tcpclient linux-kernel

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

Indy TCP - 循环读取数据

TCP服务器每8ms连续发送一次数据帧.我想编写一个能够接收这些数据帧的客户端.在Indy 9中是否有任何程序知道缓冲区中是否有可用的数据?

我目前的程序如下(我使用的是Thread):

procedure TThreadRead.Execute;
var
  buffer: array [0..755] of byte;
  //s1: string;
  //i: integer;
begin
  IdTCPClient1.RecvBufferSize:= 756;
  IdTCPClient1.Connect;
  while Terminated = false do
  begin
    if IdTCPClient1.InputBuffer.Size = 0 then
       IdTCPClient1.ReadFromStack(True,0,False);
    while IdTCPClient1.InputBuffer.Size > 0 do
    begin
       ReadBuffer(buffer, FClient.InputBuffer.Size);
       //s1:= '';
       //For i:=0 To Length(buffer)-1 Do
       //  s1:=s1+IntToHex(Ord(buffer[i]),2); //Read values-->global var
       //Form1.Memo1.Text:=s1;
    end;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

有没有更有效的解决方案连续读取TCP数据(如UDP中的onread事件)?

提前致谢.

tcp indy tcpclient indy-9

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

C++套接字编程最大TCP/IP套接字缓冲区大小?

我正在使用C++ TCP/IP套接字.根据我的要求,我的客户端必须连接到服务器并读取它发送的消息(这是真的很新,不是吗)但是...在我的应用程序中我必须等待一段时间(通常是1到2小时)在我真正开始阅读消息之前(通过recv()或read()),服务器仍然继续发送消息.

我想知道缓冲区的容量是否有限制,以防止这些消息被读取以及它们的物理内存用于缓冲这些消息?发件人或收件人?

c++ sockets buffer tcpclient tcpserver

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

C:套接字连接和数据丢失

我有一个通过套接字进行通信的客户端和服务器。我像这样设置它们:

sockfd = socket(AF_INET, SOCK_STREAM, 0);
...
Run Code Online (Sandbox Code Playgroud)

客户端联系服务器,服务器发送响应(在我的测试用例中为2906字节):

n = write(newsockfd, msgout,strlen(msgout));
if (n < 0){ 
  printf("Unable to send reponse.\n");
}else{
  printf("Response sent.\n");
}
Run Code Online (Sandbox Code Playgroud)

客户端读取如下响应:

n = read(sockfd,buffer,sizeof(buffer));
if (n < 0){ 
  printf("Socket error.\n");
}else{
  printf("%d bytes read.\n", n);
}
Run Code Online (Sandbox Code Playgroud)

缓冲区的大小约为10000个字节。现在经常发生这种情况(占所有情况的25%-75%的时间),只有1448字节到达客户端。没有比这更多的数字或1448。您如何处理这种数据丢失情况,为什么会发生?TCP / IP不能确保没有数据丢失吗?由于错误率很高,因此套接字连接对我几乎没有用。即使我先将邮件的大小发送给客户端。谁保证此消息会到达?如果确实如此,那么我仍然需要一遍又一遍地重新发送主要消息。

我只是用更大的字符串(14538)字节再次尝试了一下,在所有情况下100%仅到达5792字节。所以我猜我的代码中有一个编程错误。但是我看不到。

这是我的测试案例(Linux):

客户:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h> 
#include <time.h>

int main(int argc, char *argv[]){

  int sockfd, portno, n;
  struct sockaddr_in serv_addr;
  struct hostent *server;
  int …
Run Code Online (Sandbox Code Playgroud)

c sockets tcpclient data-loss

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

TcpClient; NetworkStream; ReadAsync; C#

请原谅我对任务和异步的知识不足。

使用TcpClient类,我正在与可用服务器建立连接:

void async RunClientAsync()
{
    TcpClient client = new TcpClient();
    try
    {
        await client.ConnectAsync(IPAddress.Parse("1.1.1.1"), 8889);
        Task.Start(() => ReadClientAsync(client));
    }
    catch (Exception ex)
    {
        HandleException(ex);
    }
}

// -----

void async ReadClientAsync(TcpClient client)
{
    byte[] bf = new byte[2048];
    try
    {
        while(true)
        {
            int br = await client.NetworkStream().ReadAsync();
            if (br > 0) 
            {
                HandleInboundData(bf, br);
            }
        }
    }
    catch (Exception ex)
    {
        HandleException(ex);
    }
}
Run Code Online (Sandbox Code Playgroud)

辅助方法HandleException(Exception ex)和HandleInboundData(byte [] buffer,int length)将执行假定的任务。

与服务器的连接将是永久的,并且从服务器接收的数据的长度和频率将是未知的,其想法是将任务丢在那里,仅在数据可用时才接收和处理入站数据。

ReadClientAsync(TcpClient client)显然是失败的,因为如果没有可用数据,ReadAsync将始终返回0字节。

我应该如何使用异步/任务来编写ReadClientAsync来防止出现繁忙循环的情况?我以前在这些情况下使用BeginRead / EndRead,效果很好。在这种特殊情况下,这将是解决方案吗?

谢谢,

c# tcpclient beginread

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