标签: tcpclient

无法从远程计算机连接

我有一些问题,如果不工作,我无法在家检查.这是代码

using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;
using System.Net.Security;

class Program
{
    private static IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
    private static int port = 6000;
    private static string data = null;

    static void Main(string[] args)
    {
        Thread thread = new Thread(new ThreadStart(receiveThread));
        thread.Start();
        Console.ReadKey();
    }

    public static void receiveThread()
    {
        while (true)
        {
            TcpListener tcpListener = new TcpListener(ipAddress, port);
            tcpListener.Start();

            Console.WriteLine("Waiting for connection...");

            TcpClient tcpClient = tcpListener.AcceptTcpClient();

            Console.WriteLine("Connected with {0}", tcpClient.Client.RemoteEndPoint);

            while (!(tcpClient.Client.Poll(20, SelectMode.SelectRead)))
            {
                NetworkStream networkStream …
Run Code Online (Sandbox Code Playgroud)

c# connection tcplistener tcpclient

8
推荐指数
1
解决办法
5684
查看次数

C#NetworkStream.Read奇怪

任何人都能指出这段代码中的缺陷吗?我正在使用TcpClient检索一些HTML.与IIS服务器通信时,NetworkStream.Read()似乎永远不会完成.如果我去使用Fiddler代理,它可以正常工作,但直接与目标服务器通信时,.read()循环将不会退出,直到连接异常时出现"远程服务器已关闭连接"之类的错误.

internal TcpClient Client { get; set; }

/// bunch of other code here...

try
{

NetworkStream ns = Client.GetStream();
StreamWriter sw = new StreamWriter(ns);

sw.Write(request);
sw.Flush();

byte[] buffer = new byte[1024];

int read=0;

try
{
    while ((read = ns.Read(buffer, 0, buffer.Length)) > 0)
    {
        response.AppendFormat("{0}", Encoding.ASCII.GetString(buffer, 0, read));
    }
}
catch //(SocketException se)
{

}
finally
{
    Close();
}
Run Code Online (Sandbox Code Playgroud)

更新

在调试器中,我可以看到整个响应立即通过并附加到我的StringBuilder(响应).当服务器完成发送响应或我的代码没有检测到它时,似乎连接没有被关闭.

结论 正如这里所说的,最好利用协议的产品(在HTTP的情况下,Content-Length头)来确定事务何时完成.但是,我发现并非所有页面都设置了内容长度.所以,我现在正在使用混合解决方案:

  1. 对于所有事务,请将请求的Connection标头设置为"关闭",以防止服务器保持套接字打开.这可以提高服务器在响应您的请求时关闭连接的几率.

  2. 如果Content-Length已设置,请使用它来确定请求何时完成.

  3. 否则,将NetworkStream的RequestTimeout属性设置为一个大但合理的值,如1秒.然后,循环开启,NetworkStream.Read()直到a)超时发生,或b)您读取的字节数比您要求的少.

感谢大家的出色和详细的回复.

c# asp.net networkstream tcpclient

8
推荐指数
2
解决办法
4088
查看次数

Telnet IAC命令回答

我正在尝试与套接字协商telnet连接.套接字正在工作,但服务器告诉我那件事:

ÿýÿýÿûÿû

login:
Run Code Online (Sandbox Code Playgroud)

所述ÿýÿýÿûÿû手段255 253 1 255 253 31 255 251 1 255 251 3

我读了所有的RFC文档,但我不明白,我应该与响应能够(字符串ASCII数据?)发送到服务器,我的愿望是成功运行login提示符,然后发送命令到像"一台服务器停止"或其他东西.

提前感谢您的回答.

sockets ip networking telnet tcpclient

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

visual studio退出调试,没有任何异常或错误

TCP/CLIENTVisual Studio 2010中有一个游戏服务器项目.当我以调试模式启动项目时,稍后(有时1天,有时1周)Visual Studio退出调试时没有任何异常或错误.我检查了窗口和应用程序日志,那里没有任何意外.

我怎样才能找出真正的问题是什么或者什么(例如像stackoverflow这样的一些例外)会导致Visual Studio退出调试?

c# tcpclient visual-studio-2010

8
推荐指数
2
解决办法
4901
查看次数

C#TcpClient.Connect通过代理

我一直在高低搜索,但是到目前为止我所看到的一切,人们只是告诉我使用其他方法.

有了这个,我的问题是我正在尝试使用socks 5代理通过TcpClient连接到服务器

我目前的设置是:

        Client = new TcpClient();
        Client.Connect(EndPoint);
        NetworkStream = Client.GetStream();
        Stream = new new BufferedStream(NetworkStream);
        Stream.Write...//Write Packet information etc
Run Code Online (Sandbox Code Playgroud)

我不确定我是否错过了任何信息,所以如果我有,我会很高兴地更新这个.

c# tcpclient proxies

8
推荐指数
1
解决办法
7985
查看次数

从TCP服务器向客户端发送多条消息(C sharp to Android)

我正在开发一个应用程序,其中c sharp服务器与android客户端通信.服务器需要向Android tcpClient发送多条消息.至于发送消息,我必须关闭服务器上的tcpClient对象.否则它不会发送.一旦tcpClient关闭,我怎么能再次与我的客户端通信,我怎么能跟踪和发送多个消息,一旦我关闭tcpClient,或者有任何其他方式发送而不关闭它.如果问题仍不明确,请在下面发表评论

它发送一个消息easlity但我需要不时发送更多的消息

这是服务器的代码片段

//in a thread
void receivingMessages(object param)
    {
        try
        {
            var paramArray = (object[])param;
            var id = paramArray[0];
            var client = paramArray[1] as TcpClient;

            var stream = client.GetStream();

            while (true)
            {
                byte[] buffer = new byte[2048];
                int bytesRead = stream.Read(buffer, 0, 2048);

                if (bytesRead > 0)
                {
                    StringBuilder sb = new StringBuilder();
                    string v = Encoding.ASCII.GetString(buffer);

                    int index = v.IndexOf('\0');
                    string trimmedXml = v.TrimEnd(new char[] { '\0' });

                    var root = XDocument.Parse(trimmedXml).Root;
                    //to get the type …
Run Code Online (Sandbox Code Playgroud)

c# sockets android tcplistener tcpclient

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

TcpClient.Close()仅适用于Thread.Sleep()

我有简单的服务器从客户端获取字符串并将其打印在屏幕上.我也有简单的客户端,发送数据和关闭:

static void Main()
{
        var client = new TcpClient("localhost", 26140);

        var stream = client.GetStream();
        Byte[] data = System.Text.Encoding.UTF8.GetBytes("CALC qwer"); 
        stream.Write(data, 0, data.Length);
        stream.Close();
        client.Close();
        //Thread.Sleep(100);
}
Run Code Online (Sandbox Code Playgroud)

并且使用未注释的字符串'Thread.Sleep(100)'它可以正常工作.但是在评论时,有时候(5-10次运行中的1次)客户端不会发送字符串.看着wireshark和netstat我注意到客户端发送SYN,ACK包,建立连接并退出而不发送任何内容而不关闭套接字.

任何人都可以解释这种行为吗?睡眠有帮助吗?我究竟做错了什么?

UPD:

有了这个示例代码,在关闭之前添加flush()确实有效,感谢Fox32.

但在它之后我回到了我的初始代码:

var client = new TcpClient("localhost", 26140);
client.NoDelay = true;
var stream = client.GetStream();
var writer = new StreamWriter(stream);
writer.WriteLine("CALC qwer");
writer.Flush();
stream.Flush();
stream.Close();
client.Close();
Run Code Online (Sandbox Code Playgroud)

即使使用NoDelay,它也无法正常工作.这很糟糕 - 在网络流上使用StreamWriter?

UPD:

这是服务器代码:

static void Main(string[] args)
    {
        (new Server(26140)).Run();
    }
Run Code Online (Sandbox Code Playgroud)

在Server类中:

public void Run()
    {
        var listener = new TcpListener(IPAddress.Any, port); …
Run Code Online (Sandbox Code Playgroud)

c# tcp tcpclient thread-sleep

7
推荐指数
2
解决办法
4291
查看次数

简单的TCPClient/Listener("hello world")示例

我正在寻找的是一个简单的TCPClient/Listener("hello world")示例.我是新手,Microsoft TCPClient/Listener类示例不是我想要的.我正在寻找的是TCPClient发送消息"Hello world"和TCPListener获取消息并发回消息"我收到了你的hello world消息"?

一点点帮助会很棒.我只有TCPClient发出"Hello World".这会有用吗?

Dim port As Int32 = 13000
        Dim client As New TcpClient("192.168.0.XXX", port)
        ' Translate the passed message into ASCII and store it as a Byte array. 
        Dim data As [Byte]() = System.Text.Encoding.ASCII.GetBytes("Hello World")

    ' Get a client stream for reading and writing. 
    '  Stream stream = client.GetStream(); 
    Dim stream As NetworkStream = client.GetStream()

    ' Send the message to the connected TcpServer. 
    stream.Write(data, 0, data.Length)
Run Code Online (Sandbox Code Playgroud)

vb.net client-server tcplistener tcpclient

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

Python - 如何检查套接字是否仍然连接

我有以下代码,这是不言自明的:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(host, port)
s.send("some data")
# don't close socket just yet... 
# do some other stuff with the data (normal string operations)
if s.stillconnected() is true:
    s.send("some more data")
if s.stillconnected() is false:
    # recreate the socket and reconnect
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(host, port)
    s.send("some more data")
s.close()
Run Code Online (Sandbox Code Playgroud)

如何实现s.stillconnected() 我不想盲目地重新创建套接字。

python sockets networking tcp tcpclient

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

NetworkStream.DataAvailable与TcpClient.Available

在以下场景中;

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

使用NS.DataAvailable和检查有什么区别TC.Available > 0吗?

c# networkstream tcpclient

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