C#网络编程(同步传输字符串)

服务端客户端通信

在与服务端的连接建立以后,我们就可以通过此连接来发送和接收数据。端口与端口之间以流 (Stream)的形式传输数据,因为几乎任何对象都可以保存到流中,所以实际上可以在客户端与服务端之 间传输任何类型的数据。对客户端来说,往流中写入数据,即为向服务器传送数据;从流中读取数据,即 为从服务端接收数据。对服务端来说,往流中写入数据,即为向客户端发送数据;从流中读取数据,即为 从客户端接收数据。

同步传输字符串

我们现在考虑这样一个任务:客户端打印一串字符串,然后发往服务端,服务端先输出它,然后将它 改为大写,再回发到客户端,客户端接收到以后,最后再次打印一遍它。我们将它分为两部分:1、客户 端发送,服务端接收并输出;2、服务端回发,客户端接收并输出。

1.客户端发送,服务端接收并输出

1.1服务端程序

我们可以在TcpClient上调用GetStream()方法来获得连接到远程计算机的流。注意这里我用了远程这 个词,当在客户端调用时,它得到连接服务端的流;当在服务端调用时,它获得连接客户端的流。接下来 我们来看一下代码,我们先看服务端(注意这里没有使用do/while循环):

class Server {
    static void Main(string[] args) {
        const int BufferSize = 8192;    // 缓存大小,8192字节

        Console.WriteLine("Server is running ... ");
        IPAddress ip = new IPAddress(new byte[] { 127, 0, 0, 1 });
        TcpListener listener = new TcpListener(ip, 8500);

        listener.Start();           // 开始侦听
        Console.WriteLine("Start Listening ...");

        // 获取一个连接,中断方法
        TcpClient remoteClient = listener.AcceptTcpClient();
        // 打印连接到的客户端信息
        Console.WriteLine("Client Connected!{0} <-- {1}",
            remoteClient.Client.LocalEndPoint, remoteClient.Client.RemoteEndPoint);

        // 获得流,并写入buffer中
        NetworkStream streamToClient = remoteClient.GetStream();
        byte[] buffer = new byte[BufferSize];
        int bytesRead = streamToClient.Read(buffer, 0, BufferSize);
        Console.WriteLine("Reading data, {0} bytes ...", bytesRead);

        // 获得请求的字符串
        string msg = Encoding.Unicode.GetString(buffer, 0, bytesRead);
        Console.WriteLine("Received: {0}", msg);

        // 按Q退出
    }
}

时间: 2024-08-02 23:52:09

C#网络编程(同步传输字符串)的相关文章

C#网络编程(异步传输字符串)

这篇文章我们将前进一大步,使用异步的方式来对服务端编程,以使它成为一个真正意义上的服务器 :可以为多个客户端的多次请求服务.但是开始之前,我们需要解决上一节中遗留的一个问题. 消息发送时的问题 这个问题就是:客户端分两次向流中写入数据(比如字符串)时,我们主观上将这两次写入视为两次 请求:然而服务端有可能将这两次合起来视为一条请求,这在两个请求间隔时间比较短的情况下尤其如此 .同样,也有可能客户端发出一条请求,但是服务端将其视为两条请求处理.下面列出了可能的情况,假 设我们在客户端连续发送两条"

多线程在Visual C#网络编程中的应用

visual|编程|多线程|网络 网络应用程序的一般都会或多或少的使用到线程,甚至可以说,一个功能稍微强大的网络应用程序总会在其中开出或多或少的线程,如果应用程序中开出的线程数目大于二个,那么就可以把这个程序称之为多线程应用程序.那么为什么在网络应用程序总会和线程交缠在一起呢?这是因为网络应用程序在执行的时候,会遇到很多意想不到的问题,其中最常见的是网络阻塞和网络等待等. 程序在处理这些问题的时候往往需要花费很多的时间,如果不使用线程则程序在执行时的就会表现出如运行速度慢,执行时间长,容易出现错

正则表达式在网络编程中的运用(1)

编程|网络|正则 [前言:]在我们编写WEB程序时,经常会判断一个字符串的有效性,如:一个串是否是数字.是否是有效的Email地址等等.如果不使用正则表达式,那么判断的程序会很长,并且容易出错,如果使用正则表达式,这些判断就是一件很轻松的工作了.本文全面介绍正则表达式的慨念.格式.并以在PHP.ASP中的应用实例增加读者的感性认识.正则表达式的应用很广,需要大家在学习和实践中不断的总结. 正则表达式简介 简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具.在网络编程中应用广泛,如PH

C#网络编程概述

编程|网络 C#网络编程概述 微软下一代互联网开发工具VS.Net已于三月份在全国范围推出,其中的一门新兴语言C#正被越来越多的开发者所接受并运用. C#作为一门集众家之长的语言,在各个方面尤其是网络编程方面有着很大的优势.本文就向大家介绍一下用C#进行网络编程的一些基本知识和方法. 微软的.Net框架为我们进行网络编程提供了以下两个名字空间:System.Net以及System.Net.Sockets.通过合理运用其中的类和方法,我们可以很容易地编写出各种网络应用程序.这种网络应用程序既可以是

Muduo 网络编程示例(二) Boost.Asio 的聊天服务器

本文讲介绍一个与 Boost.Asio 的示例代码中的聊天服务器功能类似的网络服务程序,包括客户端 与服务端的 muduo 实现.这个例子的主要目的是介绍如何处理分包,并初步涉及 Muduo 的多线程功能 .Muduo 的下载地址: http://muduo.googlecode.com/files/muduo-0.1.7-alpha.tar.gz ,SHA1 873567e43b3c2cae592101ea809b30ba730f2ee6,本文的完整代码可在线阅读 http://code.go

C#网络编程(基本概念和操作)

引言 C#网络编程系列文章计划简单地讲述网络编程方面的基础知识,由于本人在这方面功力有限,所以只 能提供一些初步的入门知识,希望能对刚开始学习的朋友提供一些帮助.如果想要更加深入的内容,可以 参考相关书籍. 本文是该系列第一篇,主要讲述了基于套接字(Socket)进行网络编程的基本概念,其中包括TCP协议 .套接字.聊天程序的三种开发模式,以及两个基本操作:侦听端口.连接远程服务端:第二篇讲述了一 个简单的范例:从客户端传输字符串到服务端,服务端接收并打印字符串,将字符串改为大写,然后再将 字符

C#网络编程初探

我们知道C#和C++的差异之一,就是他本身没有类库,所使用的类库是.Net框架中的类库--.Net FrameWork SDK.在.Net FrameWork SDK中为网络编程提供了二个名称空间:"System.Net"和"System.Net.Sockets".C#就是通过这二个名称空间中封装的类和方法实现网络通讯的. 首先我们解释一下在网络编程时候,经常遇到的几个概念:同步(synchronous).异步(asynchronous).阻塞(Block)和非阻塞

Java编程那些事儿110——网络编程小结

13.4 中文问题 网络传输过程中的中文问题也比较突出,出现该问题的原因和前面IO部分介绍的一致,都是由于传输过程中客户端程序和服务器端程序采用的字符集不一致,在解决该问题以前首先进行如下的思考: 是否在网络中一定要传输中文字符? 从前面的示例中可以看出,通过一定的协议格式设计,可以避免在网络中传输中文字符,这样就从基础上避免了中文问题的出现.例如在程序中需要传输"成功"."失败"这样的中文字符串,在协议中可以约定数字0代表"成功".1代表&qu

Java编程那些事儿108——网络编程示例1

13.3 网络编程示例 "实践出真知",所以在进行技术学习时,还是需要进行很多的练习,才可以体会技术的奥妙,下面通过两个简单的示例,演示网络编程的实际使用. 13.3.1质数判别示例 该示例实现的功能是质数判断,程序实现的功能为客户端程序接收用户输入的数字,然后将用户输入的内容发送给服务器端,服务器端判断客户端发送的数字是否是质数,并将判断的结果反馈给客户端,客户端根据服务器端的反馈显示判断结果. 质数的规则是:最小的质数是2,只能被1和自身整除的自然数.当用户输入小于2的数字,以及输