通过 tcp 网络流读/写字符串

     2023-02-24     284

关键词:

【中文标题】通过 tcp 网络流读/写字符串【英文标题】:read/write string over tcp network stream 【发布时间】:2011-02-02 14:24:35 【问题描述】:

我已经多次通过 TCP 套接字在应用程序之间发送二进制数据,但之前从未使用过字符串。碰到一个打算这样做的问题。这是我得到的:

        TcpClient tcpClient = new TcpClient("localhost", port);

        //Connects fine
        NetworkStream ns = tcpClient.GetStream();
        StreamWriter sw = new StreamWriter(ns);

        //The code moves on but nothing seems to be sent unless I do
        //a sw.Close() after this line. That would however close the  
        //ns and prevent me from reading the response further down
        sw.Write("hello");

        //I am using a stream reader with ReadToEnd() on the tcpListener
        //which never receives the string from this piece of code

        //Since the above never actually send I get stuck here
        string response = new StreamReader(ns).ReadToEnd();

        sw.Close();
        tcpClient.Close();

如何在不关闭网络流的情况下发送字符串? ns.Flush() 是我真正想要的。

【问题讨论】:

关于冲洗的一句话。从 NetworkStream 文档中,ns.Flush() 什么都不做,而 sw.Flush() 保留以供将来使用……所以我猜在这种情况下,flush 什么都不做。 那不正确(不管这是否是文档中的错误)。 ns.Flush() 保留供将来使用,但不保留 sw.Flush()。如果我注释掉 sw.Flush(),它会失败。 【参考方案1】:

你有一个 sw.Flush() ,它应该可以工作。 WriteLine() 也可能做到了。

但是当对方执行 ReadLine() 时,您必须确保以换行符结尾。试试 WriteLine() 而不是 Write()。

在关闭 StreamReader/Writer 时要小心,它们也会关闭其底层流。

【讨论】:

我尝试在 sw.Write() 之后添加 sw.Flush() 但它似乎仍然没有发送任何内容。 @bluevoo 你确定什么都没有发送(相对于没有反应)?如果另一方执行 ReadLine() 则您缺少换行符。试试 WriteLine() 而不是 Write()。【参考方案2】:

有一个StreamWriter.Flush()。当您完成向您发送消息后,只需执行sw.Flush()。然而,由于缓冲区的大小相当大(高达几 KB),正确的方法是在等待响应之前只使用Flush()。这样,对.Write() 的多个调用可以捆绑到一个数据包中,并同时通过网络发送。

【讨论】:

尝试在 sw.Write() 之后添加 sw.Flush() 但它似乎仍然没有发送任何内容。【参考方案3】:

您只需将 StreamWriter 上的 AutoFlush 属性设置为 true。

【讨论】:

每次写入后都会刷新...对性能不太好。

tcp是啥意思网络用语

...文含义是传输控制协议。tcp,是一种网络通信协议,旨在通过Internet发送数据包。TCP是面向连接的协议,是允许系统通过Internet进行通信的标准,它定义了如何建立和维护应用程序可以通过其交换数据的网络对话;保证了数据的... 查看详情

网络编程socket网络编程(代码片段)

...称?能够说出TCP协议下两个常用类名称?能够编写UDP协议下字符串数据传输程序**?能够编写TCP协议下字符串数据传输程序***?能够理解TCP协议下文件上传案例第1章网络通信协议这里的网络是指计算机网络,首先我们应该知道什么是计... 查看详情

通过 TCP/网络模块的 Syslog-ng 多行输入

】通过TCP/网络模块的Syslog-ng多行输入【英文标题】:Syslog-ngmultilineinputoverTCP/Networkmodule【发布时间】:2017-10-2417:28:44【问题描述】:我们正在尝试通过tcp连接将日志捕获到syslog-ng。日志看起来像这样:1810717353--user--notice--IPV4----20... 查看详情

tcp/ip协议详解

...绝大部分内容都息息相关,包括现在打开的这个博客也是通过TCP/IP协议来发送到你的设备上的。1.TCP/IP协议的四层结构在计算机网络中共包括四层结构,从上到下分别是应用层、传输层、网络层和链路层。应用层顾名思义就是我... 查看详情

网络通信中tcp多客户端连接

...呢?做开发的同学应该经常听说uid这个属性。可以为什么通过UID就知道要发送的数据是给正确的用户的呢?  不怎么忙的时候。仔细的了解了一下TCP的几个API和其中的参数。下面来看一下这几个API和参数:描述:当创建socket套... 查看详情

你也可以写个聊天程序-c#socket学习1(代码片段)

...开浏览器访问网页信息都是使用的HTTP/HTTPS协议,而HTTP是通过的TCP建立的连接。TCP底层又是通过的Socket套接字进行的 查看详情

漫谈tcp/ip网络

...想法,就写一点。之前写过一些关于分组交换和TCP/IP网络的,所以我很难给这篇随笔命名,就叫《漫谈TCP/IP(2)》吧,以后再写就是3,4,5…类推。https://blog.csdn.net/dog250/article/details/118244454ht 查看详情

基于tcp协议的网络通信

...拟链路,一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信。Java对基于TCP协议的网络通信提供了良好的封装,Java使用Socket对象来代表两端的通信接口,并通过Socket产生IO流来进行网络通信。 查看详情

python网络编程(通过tcp或者udp协议通信)(代码片段)

1、基于tcp协议传送文件:  客户端:importsocketimportosimportjsonimportstructclient=socket.socket()client.connect((‘127.0.0.1‘,8080))#文件大小file_size=os.path.getsize(r‘F:\老男孩Python7期\day32\视频\02TCP发送大文件.mp4‘)#文件名字file 查看详情

vb.net如何使用tcp/ip协议向服务器发送字符串,要用到啥控件和函数?

TCP协议是TCP/IP协议簇中的传输层中的一个协议,也是TCP/IP协议簇最为重要的协议之一。在TCP/IP协议簇中,有一个协议和TCP协议非常类似,这就是UDP协议,网络上进行基于UDP协议的数据传送时,发送方只需知道接收方的IP地址(或... 查看详情

41网络协议基础

...nbsp;模型每条数据都是经过7层结构,发出数据的时候,从字符串到最后的二进制,接收时,在经过逆向的7层结构,从二进制解释成字符串;每经过一层,都会添加各自的报文。  查看详情

简单的服务器tcp版本熟悉其api网络(代码片段)

...:上篇,我们写了UDP版本的简单服务器,本篇通过写一个简单的服务器来了解TCP的常用API目录TCP版本(以长连接为例)服务器程序服务器的处理方式:短连接长连接客户端程序多线程改进服务器线程池再改进:总... 查看详情

通过 TCP 连接 Lua 发送字符串变量

】通过TCP连接Lua发送字符串变量【英文标题】:SendstringvariableviaTCPconnectionLua【发布时间】:2016-10-1118:00:29【问题描述】:我在Lua中每10秒通过TCP连接在两个ESP8266模块之间发送数据:string="abc"cl=net.createConnection(net.TCP,0)cl:connect(80,"1... 查看详情

如何通过网络允许/拒绝数据包[关闭]

】如何通过网络允许/拒绝数据包[关闭]【英文标题】:Howpacketareallowed/deniedoverthenetwork[closed]【发布时间】:2013-05-2810:35:32【问题描述】:在开始一个网络项目之前,我正在尝试完全理解TCP/UDP协议。假设我有一个TCP服务器。我知... 查看详情

网络编程tcp学习

上传txt文本通过socket向服务端发送数据然后用serversocket接收socket通过流读取数据保存服务端在发送确认信息并在client输出 clientimportjava.io.BufferedReader;importjava.io.FileReader;importjava.io.IOException;importjava.io.InputStreamReader;i 查看详情

网络传输--tcp(代码片段)

...手回到顶部 一、TCP简介TCP1.TCP的简介  TCP通信需要通过创建链接,数据传送,终止链接3个步骤  2.TCP的特点  面向连接:建立间接,通信,关闭连接.这种连接方式是一对一的,所以不支持广播模式  可靠传输    应答机... 查看详情

tcp/ip网络

...本概念:地理位置不同,具有独立性功能的多台计算机,通过通信线路连接起来,在网络操作系统和网络管理软件和网络通信协议的协调下,实现数据共享和信息传递的计算机系统IP地址,域名,URL,以及常用网络设备将IP地址... 查看详情

浅看网络结构与tcp/ip协议栈

...输协议,使用两条TCP连接:控制和数据传输,通过ASCII码字符串请求,使用3位数字应答   QQTCPF协议(文字聊天协议),建立在UDP之上,不同请求的发起方相同,请求和响应的序列号相同   DNS域名解析协议,... 查看详情