TcpClient 为基于 Socket 构建的用来进行 TCP 通信的简单类,主要用于 TCP 客户端的编写,可以使用同步或者异步。发送接收数据用 NetworkStream 。很多东西摘录自MSDN

名称 说明
TcpClient() 初始化 TcpClient 类的新实例。
TcpClient(AddressFamily) 使用指定的族初始化 TcpClient 类的新实例。
TcpClient(IPEndPoint) 初始化 TcpClient 类的新实例,并将其绑定到指定的本地终结点。
TcpClient(String, Int32) 初始化 TcpClient 类的新实例并连接到指定主机上的指定端口。

以上是摘自MSDN上的,其中 AddressFamily 指的是使用指定的协议族,例如IPv4或者IPv6 如果要指定本地端口,用 IPEndPoint 来进行绑定。

TcpCient

名称 说明
Active 获取或设置一个值,它指示是否已建立连接。
Available 获取已经从网络接收且可供读取的数据量。
Client 获取或设置基础 Socket。
Connected 获取一个值,该值指示 Socket 的基础 TcpClient 是否已连接到远程主机。
ExclusiveAddressUse 获取或设置 Boolean 值,指定 TcpClient 是否只允许一个客户端使用端口。
LingerState 获取或设置有关关联的套接字的延迟状态的信息。
NoDelay 获取或设置一个值,该值在发送或接收缓冲区未满时禁用延迟。
ReceiveBufferSize 获取或设置接收缓冲区的大小。
ReceiveTimeout 获取或设置在初始化一个读取操作以后 TcpClient 等待接收数据的时间量。
SendBufferSize 获取或设置发送缓冲区的大小。
SendTimeout 获取或设置 TcpClient 等待发送操作成功完成的时间量。

NetworkStream

名称 说明
CanRead 获取一个值,该值指示 NetworkStream 是否支持读取
CanWrite 获取一个值,该值指示 NetworkStream 是否支持写入

TcpClient

名称 说明
BeginConnect(IPAddress, Int32, AsyncCallback, Object) 开始一个对远程主机连接的异步请求。远程主机由 IPAddress 和端口号 (Int32) 指定。
Close() 释放此 TcpClient 实例,并请求关闭基础 TCP 连接。

NetworkStream

名称 说明
BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) 从 NetworkStream 开始异步读取。
Close() 关闭当前流并释放与之关联的所有资源
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) 开始向流异步写入

TcpClient读取数据过程

TcpClient连接

TcpClient已经连接上,NetworkStream读取

NetworkStream已经读取完毕,取出数据

TcpClient 发送数据流程

确保 TcpClient 已经连接的情况下执行

TcpClient线程

NetworkStream异步发送线程

TcpClient 连接

private void TcpButton_Click(object sender, EventArgs e)
    if (TcpButton.Text == "TCP打开")
        TcpButton.Text = "TCP关闭";
        IPEndPoint targetPoint = new IPEndPoint(TcpUdp.VerifyInputIP(IPTextBox.Text), TcpUdp.VerifyInputPort(TcpTargetPortTextBox.Text));
        int localTcpPort = Int32.Parse(TcpSourcePortTextBox.Text);
        if (localTcpPort > 0)
            IPEndPoint localEP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), localTcpPort);
            tcp = new TcpClient(localEP);
            tcp = new TcpClient();
        tcp.ReceiveTimeout = 10;
        //异步连接
        tcp.BeginConnect(IPAddress.Parse(IPTextBox.Text), TcpUdp.VerifyInputPort(TcpTargetPortTextBox.Text), Connected, tcp);
        TcpButton.Text = "TCP打开";
        if ((tcp != null) && (tcp.Connected))
            ns.Close();
            tcp.Close();
        SetTcpPic(tcp.Connected);
        TcpIsOpen = tcp.Connected;

NetworkStream异步读取

private void Connected(IAsyncResult iar)
    tcp = (TcpClient)iar.AsyncState;
    tcp.EndConnect(iar);
    //MessageBox.Show("connected");
    SetTcpPic(tcp.Connected);
    TcpIsOpen = tcp.Connected;
    if ((tcp != null) && (tcp.Connected))
        ns = tcp.GetStream();
        StateObject state = new StateObject();
        state.client = tcp;
        NetworkStream stream = state.client.GetStream();
        if (stream.CanRead)
            byte[] buffer = new byte[tcp.ReceiveBufferSize];
            stream.BeginRead(state.buffer, 0, StateObject.BufferSize, new AsyncCallback(AsyncReadCallBack), state);

NetworkStream读取处理

private void AsyncReadCallBack(IAsyncResult iar)
    StateObject state = (StateObject)iar.AsyncState;
    if ((state.client == null) || (!state.client.Connected)) return;
    int NumOfBytesRead;
    NetworkStream ns = state.client.GetStream();
    NumOfBytesRead = ns.EndRead(iar);
    if (NumOfBytesRead > 0)
        byte[] buffer = new byte[NumOfBytesRead];
        Array.Copy(state.buffer, 0, buffer, 0, NumOfBytesRead);
        ReceiveAppend(buffer, TcpUdp.StringType.String);
        ns.BeginRead(state.buffer, 0, StateObject.BufferSize, new AsyncCallback(AsyncReadCallBack), state);
        ns.Close();
        state.client.Close();
        ns = null;
        state = null;

NetworkStream发送

if (TcpIsOpen)
    if (ns != null)
        //ns.Write(buffer, 0, buffer.Length);
        ns.BeginWrite(buffer, 0, buffer.Length, new AsyncCallback(StreamWriteCallBack), ns);
private void StreamWriteCallBack(IAsyncResult iar)
    NetworkStream ns = (NetworkStream)iar.AsyncState;
    ns.EndWrite(iar);
                    TcpClient为基于Socket构建的用来进行TCP通信的简单类,主要用于TCP客户端的编写,可以使用同步或者异步。发送接收数据用NetworkStream。很多东西摘录自MSDN构造函数名称说明TcpClient()初始化 TcpClient 类的新实例。TcpClient(AddressFamily)使用指定的族初始化 TcpClient 类的新实例。...
				
在网络编程里,我们经常要连接服务器,特别在连接的时候,需要等待很长时间,如果是使用界面线程,就会阻塞界面的操作;如果是多个并发的任务,就会阻塞任务的执行。因此,这样对于用户来说,总是体验不好。所以需要针对这种情况进行别的尝试,那么就是采用异步编程,或者采用多线程。在本文里采用异步编程,就可以快捷地解决问题。由于采用了异步编程,所以从TcpClient里回调函数去更新界面时,就不能直接采用阻塞的方式了,需要采用多线程的方式来更新界面,可以参考下面的连接: (2)C# 多线程更新界面的错误方法_大坡3D软件开
2.TcpListener类 TcpListener类用来侦听来自TCP网络客户端的连接。可使用TcpClient或Socket来连接TcpListener。可使用IPEndPoint、本地IP地址及端口号或者仅使用端口号,来创建TcpListener。 TcpListen类的属性 其中定义了三个按钮,分别是建立连接,接收和发送。 c#中的tcp通信实质就是Socket通信。 private void button1_Click(object sender, EventArgs e)
前段时间公司项目中遇着需要做文件的远程传输,场景是用户通过网页选择一些文件,然后提交请求到服务器,同时把请求标识传递给本机的TCP文件传输端;服务器收到请求后在服务器端创建任务生成保存文件的路径同时通知文件传输端开始传文件到服务器,当时是同事用C++写的传输端,于是便想何不用NET来实现呢,本来服务端的大部分程序和客户端程序都是用NET写的,于是便有了这篇文章。小生一直是做web开发的,对WinForm技术不胜熟悉,如有不妥还请拍砖。 在NET框架下可以方便的使用tcplistener和tcpclient
您好,根据您的要求,我将用300字回答关于"c"的问题。 "c"是拉丁字母表中的第三个字母。在英语中,它常常用作单词的开头字母,例如cat(猫),car(汽车),cup(杯子)等等。此外,在计算机编程中,"c"也是一种很重要的编程语言。 "C"语言是一种广泛使用的计算机编程语言,它具有高效、可移植的特点。这种语言最初由美国贝尔实验室的Dennis Ritchie开发,并于1972年首次发布。它是一种结构化编程语言,被用于开发操作系统、编写驱动程序、创建嵌入式系统等等。"C"语言的语法简洁明了,易于学习和理解,因此成为了许多编程爱好者的首选。 此外,"C"也代表着一种语言等级评估标准——C1、C2、C3等。这种标准主要用于评价学生的语言能力和阅读理解水平。根据成绩,学生可以在中学和大学中获得不同级别的证书。 总之,"c"是一个多功能字母。它不仅仅是字母表中的一个字母,还代表着一种编程语言和语言等级评估标准。它在不同领域中都扮演着重要的角色,无论是在日常用语中还是在技术领域中都不可忽视。希望这个回答对您有所帮助,谢谢!
/// Gets or sets the clock skew to apply when validating a time. /// </summary> /// <exception cref="ArgumentOutOfRangeException">If 'value' is less than 0.</exception> /// The default is <c>300</c> seconds (5 minutes). [DefaultValue(300)] public TimeSpan ClockSkew [/code]
【Oracle】排序与sort_area_size walkuere: 我show parameter看不到结果,然后我就照着这个设置了,读完我才发现,我改不回去了,MLGB