当前位置:  开发笔记 > 编程语言 > 正文

如何使用套接字通过互联网发送数据?

如何解决《如何使用套接字通过互联网发送数据?》经验,为你挑选了3个好方法。

我想通过桌面应用程序通过互联网发送数据.我对插座有点了解.我已在局域网内传输数据,但现在我想通过互联网传输数据.传输大量和小量数据的最佳方法是什么?

我的系统连接到可以访问互联网的服务器.我系统的IP地址是动态的.我不知道如何将数据发送到连接到互联网的另一个系统.我需要找到路由器地址吗?(我的IP地址生成为192.168.1.15).

是否使用了足够的套接字,或者是否需要HTTP?



1> Sunny Mileno..:

如果不涉及防火墙/代理,套接字就足够了.

但是,由于涉及互联网(不是最快的连接),我建议为了方便起见,你应该更好地选择通过http进行远程连接.这样,即使将来设置发生变化,防火墙/代理也参与到等式中,您也不必担心.



2> sipwiz..:

如果您只想将原始数据从一台机器传输到另一台机器,那么使用TCP套接字非常容易.

这是一个简单的例子.

服务器:

 ThreadPool.QueueUserWorkItem(StartTCPServer);

 private static void StartTCPServer(object state) {
        TcpListener tcpServer = new TcpListener(IPAddress.Parse("192.168.1.15"), 5442);
        tcpServer.Start();
        TcpClient client = tcpServer.AcceptTcpClient();

        Console.WriteLine("Client connection accepted from " + client.Client.RemoteEndPoint + ".");

        StreamWriter sw = new StreamWriter("destination.txt");

        byte[] buffer = new byte[1500];
        int bytesRead = 1;

        while (bytesRead > 0) {
            bytesRead = client.GetStream().Read(buffer, 0, 1500);

            if (bytesRead == 0) {
                break;
            }

            sw.BaseStream.Write(buffer, 0, bytesRead);
            Console.WriteLine(bytesRead + " written.");
        }

        sw.Close();
    }

客户:

 StreamReader sr = new StreamReader("source.txt");

 TcpClient tcpClient = new TcpClient();
 tcpClient.Connect(new IPEndPoint(IPAddress.Parse("192.168.1.15"), 5442));

 byte[] buffer = new byte[1500];
 long bytesSent = 0;

 while (bytesSent < sr.BaseStream.Length) {
        int bytesRead = sr.BaseStream.Read(buffer, 0, 1500);
        tcpClient.GetStream().Write(buffer, 0, bytesRead);
        Console.WriteLine(bytesRead + " bytes sent.");

        bytesSent += bytesRead;
  }

  tcpClient.Close();

  Console.WriteLine("finished");
  Console.ReadLine();



3> James Jones..:

有关您的连接需求的更多信息,以便为您提供适当的解决方案.您可以使用许多协议,并且所有这些协议都需要权衡.您可能会选择以下两个传输层之一:

UDP - 这是一种发送数据包的"发送 - 忘记"方法.适用于不一定必须100%正确的流媒体.

好处:

    无需连接.

    很轻巧.

坏事:

    不保证您的数据包到达目的地(尽管他们大多数时间都是这样做的).

    数据包可以按照您发送的顺序到达.

    不保证其内容与发送数据包时的内容相同.

TCP - 这是一种基于连接的协议,可保证可预测的行为.

好处:

    您将确定数据包是否已到达目的地.

    数据包将按您发送的顺序到达.

    您可以保证99.999999999%的数据包到达时内容不会改变.

    流量控制 - 如果发送数据包的机器发送得太快,接收机器可以限制发送方的数据包发送速率.

坏事:

    需要建立连接.

    比UDP更多的开销.

利弊列表并非完整,但它应该是足够的信息,使您能够做出明智的决定.如果可能,您应该利用已经存在的基于应用程序层的协议,例如,如果要传输ASCII文本,则使用HTTP;如果要传输文件,则使用FTP,等等.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有