标签: tcpclient

TcpListener:如何检测客户端断开连接?

如何检测客户端何时断开与TcpListener的连接?

我的每个客户都在一个单独的线程中处理.

c# vb.net multithreading tcplistener tcpclient

6
推荐指数
1
解决办法
5405
查看次数

哪个超时值确定空闲TCP连接将关闭多长时间?

建立连接后,双方没有通信,哪个超时值决定空闲连接是否关闭?

timeout tcp tcpclient

6
推荐指数
1
解决办法
2696
查看次数

TcpClient自动重新连接

在断开连接时(例如服务器本身)使Tcpclient自动重新连接到服务器的最佳方法是什么?

我目前使用的代码是:

public void ClientWork()
{
        TcpClient client = new TcpClient();

        try
        {
            try
            {
                client.Connect(ip, port);
            }
            catch(Exception ex)
            {
                logger.ErrorFormat("client.Connect: {0}", ex.Message);
                return false;
            }

            NetworkStream ns = client.GetStream();
            byte[] buff;

            while (__bRunning)
            {
                buff = new byte[1000];
                ns.Read(buff, 0, 1000);

                string line = System.Text.Encoding.Default.GetString(buff);
            }

            //ns.Close();
            client.Close();
        }
        catch(Exception e)
        {
            //Reconnect?
            client.Close();
            client = null;

            return false;
        }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用C#.NET

c# reconnect tcpclient

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

Android Socket:java.net.SocketException:没有到主机的路由

我正在尝试从Android设备连接(通过TCP)到我的机器上运行的服务器.我有android.permission.INTERNET我的清单文件:

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
Run Code Online (Sandbox Code Playgroud)

我能够使用模拟器进行连接,但是从设备尝试会抛出错误:
Android Socket: java.net.SocketException: No route to host

谁能请帮忙.

sockets android tcpclient

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

socket.shutdownOutput()的目的

我使用以下代码将数据发送到tcp服务器.我假设我需要使用socket.shutdownOutput()正确指示客户端已完成发送请求.我的假设是否正确?如果没有,请让我知道的目的shutdownOutput().还要感谢我能做的任何进一步优化.

客户

def address = new InetSocketAddress(tcpIpAddress, tcpPort as Integer)
clientSocket = new Socket()
clientSocket.connect(address, FIVE_SECONDS)
clientSocket.setSoTimeout(FIVE_SECONDS)

// default to 4K when writing to the server
BufferedOutputStream outputStream = new BufferedOutputStream(clientSocket.getOutputStream(), 4096)

//encode the data
final byte[] bytes = reqFFF.getBytes("8859_1")
outputStream.write(bytes,0,bytes.length)
outputStream.flush()
clientSocket.shutdownOutput()
Run Code Online (Sandbox Code Playgroud)

服务器

ServerSocket welcomeSocket = new ServerSocket(6789)

while(true)
{
    println "ready to accept connections"
    Socket connectionSocket = welcomeSocket.accept()
    println "accepted client req"
    BufferedInputStream inFromClient = new BufferedInputStream(connectionSocket.getInputStream())
    BufferedOutputStream outToClient = new BufferedOutputStream(connectionSocket.getOutputStream())
    ByteArrayOutputStream bos=new …
Run Code Online (Sandbox Code Playgroud)

java sockets groovy tcp tcpclient

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

接受TCP客户端异步

我一直在制作服务器.我在方法中使用TcpListener.AcceptTcpClientAsync()async,但我不知道如何实际使它工作.我的代码现在是:

private static async void StartServer()
{
    Console.WriteLine("S: Server started on port {0}", WebVars.ServerPort);
    var listener = new TcpListener(WebVars.LocalIp, WebVars.ServerPort);
    listener.Start();
    var client = await listener.AcceptTcpClientAsync();
}
Run Code Online (Sandbox Code Playgroud)

我该如何处理客户?我只是继续编码,它会自动创建相同方法的新线程,还是我需要做一些魔术方法来为我做?

编辑:当前代码:

private static Task HandleClientAsync(TcpClient client)
{
    var stream = client.GetStream();
    // do stuff
}
/// <summary>
/// Method to be used on seperate thread.
/// </summary>
private static async void RunServerAsync()
{
    while (true)
    {
        Console.WriteLine("S: Server started on port {0}", WebVars.ServerPort);
        var listener = new TcpListener(WebVars.LocalIp, WebVars.ServerPort);
        listener.Start(); …
Run Code Online (Sandbox Code Playgroud)

c# tcp tcplistener tcpclient

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

为什么我的DeflateStream无法通过TCP正确接收数据?

我在本地计算机上的客户端和服务器设置上有一个TcpClient类.我一直在使用网络流来促进2成功之间的来回通信.

继续前进我试图在通信中实现压缩.我尝试过GZipStream和DeflateStream.我决定专注于DeflateStream.但是,连接暂停而不读取数据.

我尝试了4种不同的实现,由于服务器端没有读取传入数据和连接超时,所有实现都失败了.我将重点介绍我最近尝试过的两个实现,据我所知应该可行.

客户端分解为此请求:有两个单独的实现,一个没有编写器.

textToSend = ENQUIRY + START_OF_TEXT + textToSend + END_OF_TEXT;

// Send XML Request
byte[] request = Encoding.UTF8.GetBytes(textToSend);

using (DeflateStream streamOut = new DeflateStream(netStream, CompressionMode.Compress, true))
{
    //using (StreamWriter sw = new StreamWriter(streamOut))
    //{
    //    sw.Write(textToSend);
    //    sw.Flush();
    streamOut.Write(request, 0, request.Length);
    streamOut.Flush();
    //}
}
Run Code Online (Sandbox Code Playgroud)

服务器接收请求,我做
1.)快速读取第一个字符,然后它是否符合我的预期
2.)我继续阅读其余的.

第一次读取工作正常,如果我想读取整个流,它就在那里.但是我只想读取第一个字符并对其进行评估,然后在我的LongReadStream方法中继续.

当我尝试继续读取流时,没有要读取的数据.我猜测数据在第一次读取时丢失了,但我不知道如何确定. 当我使用普通的NetworkStream时,所有这些代码都能正常工作.

这是服务器端代码.

private void ProcessRequests()
{
    //  This method reads the first byte of data correctly and if I want to
    // I can read the entire request …
Run Code Online (Sandbox Code Playgroud)

c# tcpclient deflatestream

6
推荐指数
1
解决办法
356
查看次数

What should I do to completely close the tcpClient connection with mcu?

I'm now working on a tcp socket connection to tcp server running in ESP32. It works fine for the communication, but I failed to close the connection. After searching for the solution on close/reset tcpClient, it seems that the proper way to close a tcpClient should be:

tcpClient.GetStream().Close();
tcpCLient.Close();
Run Code Online (Sandbox Code Playgroud)

The example in msdn also use this method.

But unforunately, it cannot really close the connection. As checked in the mcu, the connection has not been closed. And it will not …

c# sockets connection tcpclient

6
推荐指数
1
解决办法
1823
查看次数

测试TCP端口是否在未连接的情况下打开

我被要求将使用的bash脚本转换nc -z为PowerShell。

该站点告诉我nc -z测试端口是否“未连接”打开。有什么方法可以使用.Net做到这一点?

附加信息

通常,要测试端口是否打开,我会用.Net TcpClient创建一个连接。如果连接成功,我也会报告所有问题。MVE:

$isConnected = $false
$client = New-Object -TypeName 'System.Net.Sockets.TcpClient'
try {
    $client.Connect($host, $port)
    $isConnected = $client.Connected
    $client.GetStream().Close(); # handle bug in .net 1.1
    $client.Close();
} catch {
    $isConnected = $false
} finally {
    if ($client.Dispose) {$client.Dispose()} # dispose method not available in all versions, so check before calling
}
Run Code Online (Sandbox Code Playgroud)

但是,尽管不发送任何数据,但它确实可以连接。

可能是由于的描述具有nc -z误导性/只是意味着没有发送数据...我无法以任何方式找到确认。

.net powershell tcpclient powershell-2.0

6
推荐指数
1
解决办法
93
查看次数

TcpClient.NoDelay 会影响已经写入的数据吗?

TcpClient.NoDelay文档状态:

获取或设置一个值,该值在发送或接收缓冲区未满时禁用延迟。

但是,目前尚不清楚这是否仅适用于设置为之后写入的true数据,或者也适用于已写入且正在等待的数据。即当缓冲区中有数据然后设置为 时,缓冲区中的数据NoDelay是否会立即发送?true

.net c# sockets tcp tcpclient

6
推荐指数
1
解决办法
143
查看次数